黑马程序员技术交流社区
标题: 【石家庄校区】多线程 [打印本页]
作者: 奔跑的蜗牛006 时间: 2018-4-23 15:10
标题: 【石家庄校区】多线程
本帖最后由 小石姐姐 于 2018-4-26 14:30 编辑
多线程
多线程进程:应用程序在内存中的执行区域.
线程:Thread线程是进程中的一个执行路径,一个进程可以有多个线程.
单线程: 安全性高,效率低.main方法(没有创建新线程时).
多线程: 安全性低,效率高.如360.
CPU:执行线程(程序)的随机性.在多个线程中随机高速切换;
两种实现多线程的方式:1.//定义线程类继承Thread类
//重写run方法
//创建线程类对象---修改线程名字
//启动线程start();
2.//定义类实现Runnable接口
//重写run方法---链式调用getname().
//创建任务对象(可以创建多个任务)
创建线程对象,传入任务Thread t=new Thread(实现类对象).---修改名字
//启动
Thread和Runnable区别:可以继续去实现其他接口类,而继承只能是单继承
线程安全问题:产生原因: 多个线程并发的访问共享的数据
有多个线程
有被多个线程所共享的数据
解决方案: 有一个房间,每次只能进去一个人,办完事以后再出来,换下一个人进去
同步代码块:synchronized(锁对象)(用在方式二中,跟单线程不一样) 创建共享锁对象:
synchronized(锁对象//obj或者getClass()){
把操作共享数据的代码,要同步的代码
}
---到同步代码块这的时候需要一个个的排队进去,在同步代码块外边,可以多线程随机进行.
锁对象要被所有线程共享.
同步方法:使用关键字synchronized修饰的方法,一旦被一个线程访问,其他线程则无法方法
非静态同步方法的锁对象是this.
静态同步方法的锁对象是当前类的字节码对象.
同步,可以修饰方法,一旦被某个线程访问,则直接锁住,其他线程无法访问
同步:安全性高,效率低.(只能有一个线程进行)
非同步:效率高,安全性低(多个线程同时进行)
定义共享数据:1假如定义多个任务(创建多个Runnable实现类对象),每个线程都有自己单独的任务时,共享数据前加static来定义共享数据可以解决问题
扩展:并发:同时发生,多线程并发
同步:sync,一步一步执行,一个执行完后执行下一个,如单线程
异步:async,同时执行多步,如多线程
阻塞:上一行代码正在执行, 还没有执行完毕, 程序就阻塞在这里了, 下一行代码必须等上一行不再阻塞后才能执行.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |