java如何让线程阻塞_Java中如何使一个线程进入阻塞态?
按我的理解,當一個線程需要獲取的鎖被另一個線程占用時,將進入阻塞態。但實際好像不是這樣的,下面是我的代碼。
在run方法中會調用MyBlock的isBlocked方法,該方法添加了synchronized限定。
在main方法中創建兩個線程:t1和t2,t1運行后,由于isBlocked方法運行需要一定時間,t2應該進入阻塞態。但我調用getState方法得到的是Runnable,不是Blocked。
這是為啥呢?
public?class?TestThread?implements?Runnable?{
private?String?mThreadName?=?null;
private?MyLock?mLock?=?null;
public?TestThread(String?name,?MyLock?l){
mThreadName?=?name;
mLock?=?l;
}
@Override
public?void?run()?{
//?TODO?Auto-generated?method?stub
subTask();
}
private?void?subTask()
{
System.out.println(mThreadName?+?"START!");
mLock.isLocked();
System.out.println(mThreadName?+?"END!");
}
/**
*?@param?args
*/
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?method?stub
MyLock?lock?=?new?MyLock();
TestThread?r1?=?new?TestThread("A",?lock);
Thread?t1?=?new?Thread(r1);
t1.start();
TestThread?r2?=?new?TestThread("B",?lock);
Thread?t2?=?new?Thread(r2);
t2.start();
System.out.println(t2.getState());
//t2.interrupt();
System.out.println(t2.getState());
System.out.println("MAIN?END!");
}
public?static?class?MyLock{
private?ReentrantLock?mLock?=?new?ReentrantLock();
public?synchronized?void?isLocked(){
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
for?(int?i?=?0;?i?
System.out.print(","?+?i);
}
System.out.println("#############################");
}
}
}
總結
以上是生活随笔為你收集整理的java如何让线程阻塞_Java中如何使一个线程进入阻塞态?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab 打开软件报错,matlab
- 下一篇: 周围剃光头顶留长发型_发型改变气质,这话