导图社区 多线程
关于Java多线程知识的一个小概括,还有很多扩张不全面
关于MySQL数据库第三篇的知识思维导图
关于MySQL数据库第二篇知识
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
11 多线程
进程和线程
什么是进程?
进程:当前正在运行的程序,一个应用程序在内存中的执行区域
什么是线程?
进程中的一个执行控制单元也可以说执行路径 同一时间,只能做一个任务:多线程是为了提供执行效率
线程的特点
单线程:安全性高,但是效率低
多线程:安全性低,但是效率高
main是单线程的
在main方法中的程序,是按照从上至下执行的.
如果在main方法,实现来多个线程,那么main也会与其他线程来抢夺(CUP)资源.哪个线程抢夺了CPU的执行权,就去执行哪个线程.
线程实现方式
第一种方式 继承
1.定义一个子类去继承Thread类 2.重写run方法 3.将我们的执行代码写入到run方法中. 4.创建子类对象 5.开启线程,使用start方法开启线程.
第二种方式 实现
1.定义一个类,去实现Runnable接口 2.重写run方法 3.将实现的代码写入run方法中 4.创建Runnable接口的实现类对象 5.创建Thread对象,将Runnable接口的实现类对象传入. 6.使用Thread类对象取调用方法,start开启线程
两种实现线程的方法的区别
继承Thread类
好处:可以直接使用父类中的方法 例如获取线程的名字
缺点:类只能单继承,不能多继承,如果一个去继承 Thread类就不可能在同时继承其他类. 这样我们程序的扩展性,变弱.
实现Runnable接口
好处:类可以继承一个类,但是可以同时实现多个接口.扩展性高.
不能直接拿到Thread中的方法,但是可以借助Thread.currentThread();该方法返回的是Thread类对象,我们就可以借助该对象,去调用Thread中的方法. Thread.currentThread():返回对当前正在执行的线程对象的引用.
用来获取线程名的方法:String getName() 用来设置线程名称的方法:void setName(String name) 同一线程不能连续开启两次.
Thread.sleep(毫秒值);
这个方法,是让线程睡眠,睡眠的时间是根据你传入的毫秒值决定的.
是有异常的,该异常不能直接抛出,只能子类直接处理 try ... catch()
同步代码块
是使用关键字:synchronized
特点
synchronized:同步(锁),可以修饰代码块和方法,被修饰的代码块和方法一旦被某个线程访问,则直接锁住,
锁对象:可以是任意对象,必须是同一个对象.
同步方法
同步方法:使用关键字synchronized修饰的方法,一旦被一个线程访问,则整个方法全部锁住,其他线程则无法访问
方法的锁对象
非静态同步方法的锁对象是this
静态的同步方法的锁对象是当前类的字节码对象
了解
1 设置现成的名字 可以通过构造
使用继承 需要生成有参构造
使用实现结构,创建对象时通过构造第二个参数
2 匿名内部类方式 创建线程对象
new Thread() { @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("柳岩"); } } }.start();
3 卖票通过集成方式 怎么操作票的变量
4 等待唤醒机制