标签:adl 实例变量 csdn 绑定 计数器 同步方法 class box eth
参考:
概述:每个线程都有自己的工作内存,在JVM层面,包含:
常规划分为两类:
参考:
线程可以分为5种状态:
(一). 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中。
(二). 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。
(三). 其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。
当多个线程对同一个对象的实例变量(全局变量),进行读写时,发生变量值不一致,在多个线程间值不同步的情况,进而影响程序执行流程
synchronized取得的锁都是对象锁,如下:
1: 修饰实例方法,锁为当前实例对象
2: 修饰静态方法,锁为当前类的class对象
3: 修饰代码块,锁可以设置this(当前实例对象),或是this.class(当前类的class对象),或是其他对象
synchronized锁重入,当一个线程得到一个对象锁后,再次请求此对象锁(同一把锁)时可以再次得到,如:
1: 在一个synchronized方法/块的内部调用本地的其他synchronized方法/块时,是永远可以得到锁的
2: 父子类继承关系中,子类可以通过可重入锁调用父类的同步方法
java中停止正在运行的线程:
1:使用退出标志,之后当线程运行完run方法后线程终止
2:使用stop()方法强行终止,不推荐,stop(),suspend(),resume()方法都是过期作废的
3: 使用 return 停止异常,即run()方法中符合条件后return,也会终止线程
4:使用异常法(推荐),如:(1)先调用线程的interrupt()方法,在运行run()方法中出现sleep(),会抛出InterruptedException异常,终止线程
(2)先在run()方法中出现sleep()方法,之后被调用interrupt()方法,也会抛出InterruptedException异常
(3)未处理的RuntimeException,发生异常后线程终止
标签:adl 实例变量 csdn 绑定 计数器 同步方法 class box eth
原文地址:https://www.cnblogs.com/wuba/p/11627770.html