本篇內(nèi)容主要講解“Java線程狀態(tài)舉例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java線程狀態(tài)舉例分析”吧!
創(chuàng)新互聯(lián)建站是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來公司不斷探索創(chuàng)新,始終堅持為客戶提供滿意周到的服務,在本地打下了良好的口碑,在過去的十余年時間我們累計服務了上千家以及全國政企客戶,如葡萄架等企業(yè)單位,完善的項目管理流程,嚴格把控項目進度與質(zhì)量監(jiān)控加上過硬的技術(shù)實力獲得客戶的一致稱譽。

下面就一些場景分析鎖和線程的狀態(tài)
1、 線程1獲得鎖后不釋放,就是運行狀態(tài)(RUNNABLE),線程2就是休眠狀態(tài)TIMED_WAITING (sleeping)
package com.example.demo.thread.threadstate;
public class ThreadState1 implements Runnable{
@Override
public void run() {
System.out.println("ThreadState1---begin---lock");
synchronized (ThreadStateTest.class){
try {
System.out.println("ThreadState1---get---lock");
while(true){}
}catch (Exception e){
}
}
}
}
package com.example.demo.thread.threadstate;
public class ThreadState2 implements Runnable {
@Override
public void run() {
try {
Thread.sleep(30000);
}catch (Exception e){
}
}
}"Thread-1" #13 prio=5 os_prio=0 tid=0x000000001a51b800 nid=0x42b8 waiting on condition [0x000000001b47f000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at com.example.demo.thread.threadstate.ThreadState2.run(ThreadState2.java:14) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - None "Thread-0" #12 prio=5 os_prio=0 tid=0x000000001a51b000 nid=0x6d5c runnable [0x000000001b37e000] java.lang.Thread.State: RUNNABLE at com.example.demo.thread.threadstate.ThreadState1.run(ThreadState1.java:10) - locked <0x00000000d63ffac0> (a java.lang.Class for com.example.demo.thread.threadstate.ThreadStateTest) at java.lang.Thread.run(Thread.java:748)
2、線程1獲得鎖后不釋放,就是運行狀態(tài)(RUNNABLE),線程2未獲得鎖就是阻塞狀態(tài)(BLOCKED)
package com.example.demo.thread.threadstate;
public class ThreadState1 implements Runnable{
@Override
public void run() {
System.out.println("ThreadState1---begin---lock");
synchronized (ThreadStateTest.class){
try {
System.out.println("ThreadState1---get---lock");
while(true){}
}catch (Exception e){
}
}
}
}
package com.example.demo.thread.threadstate;
import sun.misc.Unsafe;
public class ThreadState2 implements Runnable {
@Override
public void run() {
try {
Thread.sleep(30000);
}catch (Exception e){
}
System.out.println("ThreadState2---begin---lock");
synchronized (ThreadStateTest.class){
try {
System.out.println("ThreadState2---get---lock");
}catch (Exception e){
}
ThreadStateTest.class.notify();
}
System.out.println("ThreadState2---end");
}
}"Thread-1" #13 prio=5 os_prio=0 tid=0x000000001a51b800 nid=0x42b8 waiting for monitor entry [0x000000001b47f000] java.lang.Thread.State: BLOCKED (on object monitor) at com.example.demo.thread.threadstate.ThreadState2.run(ThreadState2.java:21) - waiting to lock <0x00000000d63ffac0> (a java.lang.Class for com.example.demo.thread.threadstate.ThreadStateTest) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - None "Thread-0" #12 prio=5 os_prio=0 tid=0x000000001a51b000 nid=0x6d5c runnable [0x000000001b37e000] java.lang.Thread.State: RUNNABLE at com.example.demo.thread.threadstate.ThreadState1.run(ThreadState1.java:10) - locked <0x00000000d63ffac0> (a java.lang.Class for com.example.demo.thread.threadstate.ThreadStateTest) at java.lang.Thread.run(Thread.java:748)
3、線程1獲得鎖后sleep,就是休眠狀態(tài)TIMED_WAITING (sleeping),線程2未獲得鎖就是阻塞狀態(tài)(BLOCKED),這說明sleep不釋放鎖
package com.example.demo.thread.threadstate;
public class ThreadState1 implements Runnable{
@Override
public void run() {
System.out.println("ThreadState1---begin---lock");
synchronized (ThreadStateTest.class){
try {
System.out.println("ThreadState1---get---lock");
System.out.println("ThreadState1---begin---sleep");
Thread.sleep(30000);
System.out.println("ThreadState1---end---sleep");
}catch (Exception e){
}
}
}
}
package com.example.demo.thread.threadstate;
import sun.misc.Unsafe;
public class ThreadState2 implements Runnable {
@Override
public void run() {
try {
Thread.sleep(5000);
}catch (Exception e){
}
System.out.println("ThreadState2---begin---lock");
synchronized (ThreadStateTest.class){
try {
System.out.println("ThreadState2---get---lock");
}catch (Exception e){
}
ThreadStateTest.class.notify();
}
System.out.println("ThreadState2---end");
}
}"Thread-1" #13 prio=5 os_prio=0 tid=0x000000001aea0800 nid=0x33c waiting for monitor entry [0x000000001bdef000] java.lang.Thread.State: BLOCKED (on object monitor) at com.example.demo.thread.threadstate.ThreadState2.run(ThreadState2.java:17) - waiting to lock <0x00000000d63ffac0> (a java.lang.Class for com.example.demo.thread.threadstate.ThreadStateTest) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - None "Thread-0" #12 prio=5 os_prio=0 tid=0x000000001ae86000 nid=0xb50 waiting on condition [0x000000001bcef000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at com.example.demo.thread.threadstate.ThreadState1.run(ThreadState1.java:11) - locked <0x00000000d63ffac0> (a java.lang.Class for com.example.demo.thread.threadstate.ThreadStateTest) at java.lang.Thread.run(Thread.java:748)
4、線程1獲得鎖后wait,就是等待狀態(tài)WAITING (on object monitor),線程2sleep就是休眠狀態(tài)TIMED_WAITING (sleeping)
package com.example.demo.thread.threadstate;
public class ThreadState1 implements Runnable{
@Override
public void run() {
System.out.println("ThreadState1---begin---lock");
synchronized (ThreadStateTest.class){
try {
System.out.println("ThreadState1---get---lock");
System.out.println("ThreadState1---begin---wait");
ThreadStateTest.class.wait();
System.out.println("ThreadState1---end---wait");
}catch (Exception e){
}
}
}
}
package com.example.demo.thread.threadstate;
import sun.misc.Unsafe;
public class ThreadState2 implements Runnable {
@Override
public void run() {
try {
Thread.sleep(5000);
}catch (Exception e){
}
System.out.println("ThreadState2---begin---lock");
synchronized (ThreadStateTest.class){
try {
System.out.println("ThreadState2---get---lock");
Thread.sleep(20000);
}catch (Exception e){
}
ThreadStateTest.class.notify();
}
System.out.println("ThreadState2---end");
}
}"Thread-1" #13 prio=5 os_prio=0 tid=0x000000001ae49800 nid=0x73c8 waiting on condition [0x000000001bd4f000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at com.example.demo.thread.threadstate.ThreadState2.run(ThreadState2.java:18) - locked <0x00000000d63ffac0> (a java.lang.Class for com.example.demo.thread.threadstate.ThreadStateTest) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - None "Thread-0" #12 prio=5 os_prio=0 tid=0x000000001ae3d000 nid=0x6d18 in Object.wait() [0x000000001bc4f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000d63ffac0> (a java.lang.Class for com.example.demo.thread.threadstate.ThreadStateTest) at java.lang.Object.wait(Object.java:502) at com.example.demo.thread.threadstate.ThreadState1.run(ThreadState1.java:11) - locked <0x00000000d63ffac0> (a java.lang.Class for com.example.demo.thread.threadstate.ThreadStateTest) at java.lang.Thread.run(Thread.java:748)
5、線程1獲得鎖后wait,就是等待狀態(tài)TIMED_WAITING (on object monitor),線程2sleep就是休眠狀態(tài)TIMED_WAITING (sleeping)
package com.example.demo.thread.threadstate;
public class ThreadState1 implements Runnable{
@Override
public void run() {
System.out.println("ThreadState1---begin---lock");
synchronized (ThreadStateTest.class){
try {
System.out.println("ThreadState1---get---lock");
System.out.println("ThreadState1---begin---wait");
ThreadStateTest.class.wait(4000);
System.out.println("ThreadState1---end---wait");
}catch (Exception e){
}
}
}
}
package com.example.demo.thread.threadstate;
import sun.misc.Unsafe;
public class ThreadState2 implements Runnable {
@Override
public void run() {
try {
Thread.sleep(5000);
}catch (Exception e){
}
System.out.println("ThreadState2---begin---lock");
synchronized (ThreadStateTest.class){
try {
System.out.println("ThreadState2---get---lock");
Thread.sleep(20000);
}catch (Exception e){
}
ThreadStateTest.class.notify();
}
System.out.println("ThreadState2---end");
}
}"Thread-1" #13 prio=5 os_prio=0 tid=0x000000001ac1b800 nid=0x6274 waiting on condition [0x000000001bb4f000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at com.example.demo.thread.threadstate.ThreadState2.run(ThreadState2.java:18) - locked <0x00000000d63ffac0> (a java.lang.Class for com.example.demo.thread.threadstate.ThreadStateTest) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - None "Thread-0" #12 prio=5 os_prio=0 tid=0x000000001ac1b000 nid=0x4654 in Object.wait() [0x000000001ba4f000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000d63ffac0> (a java.lang.Class for com.example.demo.thread.threadstate.ThreadStateTest) at com.example.demo.thread.threadstate.ThreadState1.run(ThreadState1.java:11) - locked <0x00000000d63ffac0> (a java.lang.Class for com.example.demo.thread.threadstate.ThreadStateTest) at java.lang.Thread.run(Thread.java:748)
6、線程1獲得鎖后wait,釋放鎖,線程2獲得鎖,釋放鎖后,線程1獲得鎖繼續(xù)執(zhí)行
package com.example.demo.thread.threadstate;
public class ThreadState1 implements Runnable{
@Override
public void run() {
System.out.println("ThreadState1---begin---lock");
synchronized (ThreadStateTest.class){
try {
System.out.println("ThreadState1---get---lock");
System.out.println("ThreadState1---begin---wait");
ThreadStateTest.class.wait(10000);
System.out.println("ThreadState1---end---wait");
}catch (Exception e){
}
}
}
}
package com.example.demo.thread.threadstate;
import sun.misc.Unsafe;
public class ThreadState2 implements Runnable {
@Override
public void run() {
try {
Thread.sleep(5000);
}catch (Exception e){
}
System.out.println("ThreadState2---begin---lock");
synchronized (ThreadStateTest.class){
try {
System.out.println("ThreadState2---get---lock");
Thread.sleep(20000);
}catch (Exception e){
}
ThreadStateTest.class.notify();
}
System.out.println("ThreadState2---end");
}
}ThreadState1---begin---lock ThreadState1---get---lock ThreadState1---begin---wait ThreadState2---begin---lock ThreadState2---get---lock ThreadState2---end ThreadState1---end---wait
7、線程2ThreadStateTest.class.notify()報錯,在釋放鎖后不能notify
package com.example.demo.thread.threadstate;
public class ThreadState1 implements Runnable{
@Override
public void run() {
System.out.println("ThreadState1---begin---lock");
synchronized (ThreadStateTest.class){
try {
System.out.println("ThreadState1---get---lock");
System.out.println("ThreadState1---begin---wait");
ThreadStateTest.class.wait();
System.out.println("ThreadState1---end---wait");
}catch (Exception e){
}
}
}
}
package com.example.demo.thread.threadstate;
import sun.misc.Unsafe;
public class ThreadState2 implements Runnable {
@Override
public void run() {
try {
Thread.sleep(5000);
}catch (Exception e){
}
System.out.println("ThreadState2---begin---lock");
synchronized (ThreadStateTest.class){
try {
System.out.println("ThreadState2---get---lock");
Thread.sleep(20000);
}catch (Exception e){
}
}
ThreadStateTest.class.notify();
System.out.println("ThreadState2---end");
}
}Exception in thread "Thread-1" java.lang.IllegalMonitorStateException at java.lang.Object.notify(Native Method) at com.example.demo.thread.threadstate.ThreadState2.run(ThreadState2.java:23) at java.lang.Thread.run(Thread.java:748)
到此,相信大家對“Java線程狀態(tài)舉例分析”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!
網(wǎng)站題目:Java線程狀態(tài)舉例分析
文章鏈接:http://chinadenli.net/article20/ipchco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、品牌網(wǎng)站制作、ChatGPT、網(wǎng)站策劃、做網(wǎng)站、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)