Java多线程编程二:线程的状态

一.线程的状态

1.NEW:刚刚创建的线程,线程还没有运行等该调用线程的start();
2.RUNNABLE:这个状态的线程正在虚拟机中执行,但是它可能在等待系统其他资源。
3.BLOCKED:线程遇到同步代码,需要进入临界区获取资源权限,这时就进入阻塞状态,等获取到资源权限后,方可继续运行。
4.WAITING/TIMED_WAITING:都表示等待,区别是WAITING进入的是一个无限期的等待状态。TIME_WAITING:进入的是一个有时间限制的等待。
5.TERMINATED:终止状态,指一个线程运行完毕,进入消亡状态。


线程状态变化.png

二:如果新建线程

方法一:直接new出线程,然后必须调用start方法才能开启线程,但是这个线程什么事都没有做。
Thread t1=new Thread();
t1.start();

方法二:方法一创建的线程什么都没有做,所以引入了第二种创建线程的方法,在new Thread的时候传入一个匿名内部类并且重写它的run方法,再去调用该线程的start方法,默认thread.run方法调用的就是传入的runnable的run方法。
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
// 做你自己的事
}
});
thread1.start();

方法三:使用Runnable接口来定义Thread,比起重写Thread.run方法要好的多,并且是比较常用和推荐的方法。
public class Thread3 implements Runnable {
public static void main(String[] args) {
Thread t1=new Thread(new CreateThread3());
t1.start();
}
@Override
public void run() {
System.out.println(" I am Runnable");
} }

三.如何正确的终止线程

stop():立即终止线程,并且释放锁。如果多线程环境中,当前线程被此方法暴力终止,会导致某个操作执行不完全。而其它线程会继续执行,会造成不可预知的风险。
stopMe():新建stopMe方法,设置停止标识,在线程run方法中通过判断此标识做好线程收尾工作退出线程,这样既可以退出线程,又不会写坏数据。

四.线程中断

线程中断是一种线程间协调合作的重要方法,不能响应中断的线程注定在高并发环境中不能获得优异的性能表现。线程中断不是线程中止运行,而是在原地等待唤醒继续执行。
···
Thread thread = new Thread();
thread.start();
thread.isInterrupted(); 该方法判断当前线程是否被中断,不会清除中断标志;
thread.interrupt();中断当前线程,标记中断位;
Thread.interrupted();静态方法,判断当前线程是否被中断,并且清除中断位;
注意如果Thread的sleep方法抛出异常会清楚中断位,如果此异常被捕获处理时,要考虑是否需要重新设置中断位
···

五.等待(wait)与通知(notify/notifyAll)

调用obj的wait和notify方法必须要先获取obj的monitor,当A线程调用wait方法后会释放obj的monitor,接着A线程会进入waiting状态,在原地等待再次获取obj的monitor。等其它线程B调用obj的notify方法后,A线程并不能马上执行,因为A线程需要先获取obj的monitor,所以B线程必须执行完它的synchronized代码块,A才有机会获取obj的monitor。

六.挂起(suspend)和回复(resume)

线程的suspend和resume是一对相反的操作,suspend的线程必须调用resume才能继续执行。但是这对方法已被弃用,因为suspend操作并不释放资源会造成资源过度占用问题;

7.等待线程结束(join)和谦让(yield)

join方法:A线程的join的本质是让当前线程在A线程上不停的等待,等待A线程执行完。
yield方法:yield方法是静态方法,此方法会让出当前线程的CPU时间,如果某个线程优先级很低,可以使用此方法让出CPU资源。此方法调用后,当前线程还是会继续争夺CPU。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容