《Java多线程编程核心技术》读后感(十五)
2024-09-04 20:00:25
线程的状态
线程对象在不同的运行时期有不同的状态,状态信息就存在与State枚举类中。
验证New,Runnable,Terminated
new:线程实例化后还从未执行start()方法时的状态
runnable:线程进入运行的状态
terminated:线程被销毁时的状态
package Seven; public class MyThread extends Thread { public MyThread() {
System.out.println("构造方法中的状态:" + Thread.currentThread().getState());
} @Override
public void run() {
System.out.println("run方法中的状态:" + Thread.currentThread().getState());
}
}
package Seven; public class Run { // NEW,
// RUNNABLE,
// TERMINATED, // BLOCKED,
// WAITING,
// TIMED_WAITING, public static void main(String[] args) {
try {
MyThread t = new MyThread();
System.out.println("main方法中的状态1:" + t.getState());
Thread.sleep(1000);
t.start();
Thread.sleep(1000);
System.out.println("main方法中的状态2:" + t.getState());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }
注意:构造方法中的日志时main主线程的
验证Time_waiting
Time_waiting:线程执行了Thread.sleep()
package Seven; public class MyThread extends Thread { @Override
public void run() {
try {
System.out.println("begin sleep");
Thread.sleep(10000);
System.out.println(" end sleep");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
package Seven; public class Run {
// NEW,
// RUNNABLE,
// TERMINATED, // BLOCKED,
// WAITING,
// TIMED_WAITING, public static void main(String[] args) {
try {
MyThread t = new MyThread();
t.start();
Thread.sleep(1000);
System.out.println("main方法中的状态:" + t.getState());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
验证Blocked
blocked:出现在某一个线程等待锁的时候
package Seven; public class MyService {
synchronized static public void serviceMethod() {
try {
System.out.println(Thread.currentThread().getName() + "进入了业务方法!");
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} }
package Seven; public class MyThread1 extends Thread { @Override
public void run() {
MyService.serviceMethod();
} }
package Seven; public class MyThread2 extends Thread { @Override
public void run() {
MyService.serviceMethod();
} }
package Seven; public class Run {
// NEW,
// RUNNABLE,
// TERMINATED,
// BLOCKED,
// WAITING,
// TIMED_WAITING, public static void main(String[] args) throws InterruptedException {
MyThread1 t1 = new MyThread1();
t1.setName("a");
t1.start();
MyThread2 t2 = new MyThread2();
t2.setName("b");
t2.start();
//Thread.sleep(1000);
System.out.println("main方法中的t2状态:" + t2.getState()); }
}
验证waiting
waiting:是线程执行了object.wait()方法后所处的状态
package Seven; public class Lock { public static final Byte lock = new Byte("0"); }
package Seven; public class MyThread extends Thread { @Override
public void run() {
try {
synchronized (Lock.lock) {
Lock.lock.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
package Seven; public class Run {
// NEW,
// RUNNABLE,
// TERMINATED,
// BLOCKED,
// WAITING,
// TIMED_WAITING, public static void main(String[] args) {
try {
MyThread t = new MyThread();
t.start();
Thread.sleep(1000);
System.out.println("main方法中的t状态:" + t.getState());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
最新文章
- Action中获取servletAPI对象的方法
- myeclipse调式与属性显示
- 【原创】可以换行的RadioGroup
- SD卡fat文件系统移植
- LA 4794 - Sharing Chocolate dp
- 复旦大学EWP菁英女性课程(复旦卓越女性课程改版后第一期) _复旦大学、女性课程、高级研修班、心理学、EWP_培训通课程
- vs10创建sqlclr部署失败
- Xcode-之Code Snippets Library
- 点击Robot Framework的桌面快捷图标后,没有反应(没有打开应用程序)
- 几种功能类似Linux命令汇总
- mysql常见的优化需要注意的点
- OpenResty 操作cookies
- 闲聊js中的apply、call和arguments
- 第一章 初识 MyBatis
- 论文阅读 | A Curriculum Domain Adaptation Approach to the Semantic Segmentation of Urban Scenes
- [转][C#]服务安装卸载命令
- Solve Error: ";errcode";: 85005, ";errmsg";: ";appid not bind weapp hint";
- 洛谷P1040 加分二叉树【记忆化搜索】
- django会话session
- [中英对照]Introduction to DPDK: Architecture and Principles | DPDK概论: 体系结构与实现原理