1. 继承Thread类
1. 创建类 【Java-多线程】这是类的声明部分,并继承自Thread线程类,在里面实现了线程的run()
方法
public class SimpleThread extends Thread {
private int count = 5;
private int num ;
public SimpleThread(int _num) {
num=_num;
System.out.println("Thread: " + num);
}//run()方法是在实现Thread类的过程中一定要实现的方法
public void run() {
while(true) {
System.out.println("Thread " +
num + "(" + count+ ")");
if(--count == 0) return;
}
}
}
2. 实例化类 这里我们实例化该类,并使用
start()
方法启动线程public static void main(String[] args) {
//循环启动五个线程
for(int i = 1;
i < 3;
i++)
{
new SimpleThread(i).start();
}
}
3. 示例 上述示例结果为:
文章图片
我们可以发现,运行的结果与我们定义的顺序并不一致,并不是
Thread 1
Thread 1(5)
Thread 1(4)
Thread 1(3)
Thread 1(2)
Thread 1(1)
Thread 2
Thread 2(5)
Thread 2(4)
Thread 2(3)
Thread 2(2)
Thread 2(1)
这说明CPU处理一个现有线程集的顺序是不确定的。
2. 实现Runnable接口 1. 创建类
public class timerPrinter implements Runnable {
int pauseTime;
String name;
public timerPrinter(int x, String n) {
pauseTime = x;
name = n;
}
//run函数作为Runnable接口要实现出来
public void run() {
while(true) {
try {
System.out.println(name + ":" + new
Date(System.currentTimeMillis()));
//实现线程的休眠
Thread.sleep(pauseTime);
} catch(Exception e) {
System.out.println(e);
}
}
}}
2. 实例化类 这里将当前类的实例作为Thread类的构造参数,以此创建线程对象
public staticvoid main(String args[]) {
//创建线程t1
Thread t1 = new Thread(new timerPrinter(1000, "Thread 1"));
t1.start();
}
3. 示例
文章图片
注意:当使用runnable接口时,不能像继承Thread类那样直接创建所需对象并运行,必须从Thread类的一个实例内部运行。
线程 | 实例化方式 |
---|---|
Thread | new SimpleThread(i).start() |
Runnable | Thread t1 = new Thread(new timerPrinter(1000, “Thread 1”));
t1.start(); |
- 新建状态:线程已经被创建但尚未执行(即未调用
start()
方法) - 就绪状态:线程已经被创建(即已经处于新建状态)后,执行
start()
方法,该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。 - 运行状态:就绪状态的线程获取了CPU,执行程序代码(即
run()
方法) - 阻塞状态:程序因某种原因不会被分配CPU,无法继续运行。
- 死亡状态:线程
run()
方法执行完了或者因异常退出了run()
方法,该线程结束生命周期
- 调用sleep(long millis),使线程进入睡眠状态。
- 用suspend()暂停了线程的执行,除非收到resume()消息恢复。
- 用wait()方法暂停了线程的执行,除非收到notify()或notifyAll()消息恢复。
- 线程正在等待一些I/O操作。
- 运行的线程在获取对象的同步锁,而该同步锁被别的线程占用。
文章图片
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)