java高并发程序设计(二)多线程基础

211 阅读1分钟

什么是线程:

一个程序的最小执行单元



线程new出来调用.start()启动后,进入Runnable状态(执行或者待执行),申请锁可能进入阻塞状态(BLOCKED),调用.wait()方法进入有限期等待(WATING)状态或无限期(TIMED_WAITING),等到.notify()方法通知才能回到Runnable状态,执行结束后进入Terminated状态。 

线程的基本操作 


继承Thread类,重写Run方法,.star()启动

继承Runnable接口,实例自身对象,重写.run()方法,new  Thread构造自己的实例,.star()启动

或者new Thread的时候传一个Runnable接口 的实例

线程的终止

.stop()方法终止




不推荐使用,逃过暴力,用为会立即释放monitor资源,如果一给线程写入数据只写入了一般就被.stop()终止了,就会导致数据不完整。

线程中断


调用sleep()方法让线程等待延时执行


挂起(suspend)和继续执行(resume),两个操作 都是不推荐使用的


如果resume发生在suspend之前,会导致该线程一直被挂起,所以该线程的锁也不会释放,别的线程就会一直等待锁,导致死锁的发生。

看java虚拟机的线程:


等待join和谦让yeild


守护线程


.setDeamon(true)设置


线程优先级:

.setPriority()方法调用


线程同步


用法1


用法2


用法3:


线程等待和唤醒:


调用等待和唤醒方法时需要  同步object锁实例监视器

等待.wait()方法会释放object监视器,等待另一个线程.notify()获取到object监视器后并且执行完后续操作后才会唤醒.wait()的线程。