本帖最后由 小石姐姐 于 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,同时执行多步,如多线程 阻塞:上一行代码正在执行, 还没有执行完毕, 程序就阻塞在这里了, 下一行代码必须等上一行不再阻塞后才能执行.
|