作者:李坤凤
本次任务完成时间:2019年8月16日
开发工具与关键技术:Java线程状态 开发工具:MyEclipse 10 关键技术: Java线程状态
线程的五种状态:
1)新建状态(New):线程对象实例化后就进入了新建状态。
2)就绪状态(Runnable):线程对象实例化后,其他线程调用了该对象的 start()方法,虚拟机便会启动该线程,处于就绪状态的线程随时可能被调度执 行。
3)运行状态(Running):线程获得了时间片,开始执行。只能从就绪状态进入 运行状态。
4)阻塞状态(Blocked):线程因为某个原因暂停执行,并让出CPU的使用权后 便进入了阻塞状态。
- 等待阻塞:调用运行线程的wait()方法,虚拟机会把该线程放入等待池。
- 同步阻塞:运行线程获取对象的同步锁时,该锁已被其他线程获得,虚拟机 会把该线程放入锁定池。
- 其他线程:调用运行线程的sleep()方法或join()方法,或线程发出I/O请求 时,进入阻塞状态。
5)结束状态(Dead):线程正常执行完或异常退出时,进入了结束状态。
6)运行结果;
7)、代码
package com.xy.dome;
public class ThreadMethodDemo {
public static void main(String[] args) {
System.out.println("main 线程id:" + Thread.currentThread().getId());
System.out.println("main 线程名称:"+Thread.currentThread().getName());
MyThread3 myThread = new MyThread3();
Thread thread1 = new Thread(myThread);
//setName()可以设置线程名称
thread1.setName("线程a");
//也可以通过构造器设置线程名称
Thread thread2 = new Thread(myThread,"线程b");
// 设置线程的优先级 [1~10]
// 线程优化级较高的线程不一定先执行,线程的调度终还是取决于操作系统
thread1.setPriority(1);
thread2.setPriority(10);
System.out.println("thread1 是在否活动:" + thread1.isAlive());
System.out.println("thread2 是在否活动:" + thread2.isAlive());
thread1.start();
thread2.start();
// 不能重复调用start()
// thread2.start();
System.out.println("thread1 是在否活动:"+ thread1.isAlive());
System.out.println("thread2 是在否活动:" + thread2.isAlive());
// 主线程sleep 5s
try{
Thread.sleep(5000);
}catch(InterruptedException e)
{
//TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("5秒后...");
}
}
class MyThread3 implements Runnable{
@Override
public void run() {
// 实现Runnable接口的,无法直接使用getId(),getName()等方法
// 需要使用Thread.currentThread() 来获取到当前对象才行
System.out.println("线程id:" + Thread.currentThread().getId());
System.out.println("线程名称:" + Thread.currentThread().getName());
for (int i = 0; i < 100; i++) {
System.out.println("线程id:" + Thread.currentThread().getId() + "线程名称:"
+Thread.currentThread().getName()+ "线程优先级:"
+ Thread.currentThread().getPriority());
}
}
}