A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马