文章目录
测试代码
1
package demo3;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* 6-3
*/
public class ThreadState {
//jps:进程查看工具
//jstack:jstack是java虚拟机自带的一种堆栈跟踪工具
private static Lock lock = new ReentrantLock();
public static void main(String[] args) {
new Thread(new TimeWaiting(), "TimeWaitingThread").start();
new Thread(new Waiting(), "WaitingThread").start();
// ???????Blocked????????????????????????????
new Thread(new Blocked(), "BlockedThread-1").start();
new Thread(new Blocked(), "BlockedThread-2").start();
new Thread(new Sync(), "SyncThread-1").start();
new Thread(new Sync(), "SyncThread-2").start();
}
/**
* ???????????????
*/
static class TimeWaiting implements Runnable {
@Override
public void run() {
while (true) {
SleepUtils.second(100);
}
}
}
/**
* ???????Waiting.class???????
*/
static class Waiting implements Runnable {
@Override
public void run() {
while (true) {
synchronized (Waiting.class) {
try {
Waiting.class.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
/**
* ???????Blocked.class???????????????????
*/
static class Blocked implements Runnable {
public void run() {
synchronized (Blocked.class) {
while (true) {
SleepUtils.second(100);
}
}
}
}
static class Sync implements Runnable {
@Override
public void run() {
lock.lock();
try {
SleepUtils.second(100);
} finally {
lock.unlock();
}
}
}
}
2
package demo3;
import java.util.concurrent.TimeUnit;
/**
* 6-4
*/
public class SleepUtils {
public static final void second(long seconds) {
try {
TimeUnit.SECONDS.sleep(seconds);
} catch (InterruptedException e) {
}
}
}
cmd,jps,jstack
D:\xx\Java\jdk1.8.0_271\bin>jps
11984 Jps
16960 Launcher
7312
9608 ThreadState
D:\xx\Java\jdk1.8.0_271\bin>jstack 9608
"BlockedThread-2" #15 prio=5 os_prio=0 tid=0x0000021fd1514000 nid=0x46f4 waiting for monitor entry
"WaitingThread" #13 prio=5 os_prio=0 tid=0x0000021fd150e000 nid=0x3504 in Object.wait()略...