线程的简单总结(1)

多线程

(1)多线程: 一个应用程序有多条执行路径

     进程:正在运行的程序

     线程:是进程的执行单元,执行路径

     单线程: 一个应用程序,只有一条执行路径

        多线程: 一个应用程序,有多条执行路径

多进程的意义?

  提高cpu的使用率

多线程的意义?    

  提高应用程序的使用率

(2) java程序的运行原理和java启动是多线程的吗?

  A: java命令去启动JVM, JVM会启动一个进程,该进程会启动主线程

  B:JVM的启动是多线程的,因为最低有两个线程启动了,主线程和垃圾回收线程

(3)多线程的实现方案(掌握)

A: 继承Thread类

  1.自定义一个类(MyThread)继承Thread类

  2.重写run()方法

  3.创建MyThread对象

  4.启动线程 (start)

B: 实现Runnable接口【推荐】

  1.自定义一个类(MyRun)实现Runnable接口

  2.重写run()方法 [该接口只有一个run方法]

  3.创建MyRun的实例,作为参数传递到Thread()构造方法中--> public Thread(Runnable target)

  4.启动线程

(4)线程的调度和优先级的问题

A: 线程的调度

  1.分时调度

  2.抢占式调度(java采用的)

B: 获取和设置优先级的问题

默认优先级是5, 最低优先级是1, 最高是10

public final void setPriority(int newPriority) 设置优先级

public final int getPriorty() 获取优先级

(5)线程的控制(常见方法)

线程的休眠: sleep()

线程的加入: join()

线程的礼让: yield()

守护线程: setDaemon();

线程的中断:stop(), interrupt()

(6)线程的生命周期(结合那张图看)
新建:创建了线程对象
就绪:有执行的资格,没执行权
运行:有执行资格,也有执行权
阻塞:没有执行资格,也没有执行权
死亡:线程对象变成了垃圾,等待被回收

(7)电影院买票程序的实现
A:继承Thread类
B:实现Runnable接口(推荐)
(8)电影院买票程序出问题
A:为了符合真实的场景,加入了休眠100毫秒
B:买票问题
a:同票多次
b:负数票
(9)多线程安全问题的原因(也是将来我们判断一个程序是否有线程安全的依据)
A:是否有多线程环境
B:是否有共享数据的
C:是否有多条语句操作共享数据

(10)同步解决线程安全问题
A:同步代码块
synchronized(对象){
需要被同步的代码块(其实就是包含多条语句操作相同数据的代码)
}
可以是的任意的对象
但锁必须唯一
B:同步方法
把synchronized加在方法权限后面就可以
锁是this
C;静态同步方法
锁是该类的字节码对象(类.class)反射会讲

(11)回顾以前的线程安全的类
A:StringBuffer
B:vector
C:Hashtable
如何把一个线程不安全的集合类变成一个线程安全的
用Collections类的对应的方法即可:public static <T> List<T> synchronizedList(List<T> list)

猜你喜欢

转载自www.cnblogs.com/itcast-wzj/p/9766227.html