Java-多线程
来源:互联网 发布:手机九宫格软件 编辑:程序博客网 时间:2024/06/16 18:20
1. 继承Thread类
1. 创建类
这是类的声明部分,并继承自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 1Thread 1(5)Thread 1(4)Thread 1(3)Thread 1(2)Thread 1(1)Thread 2Thread 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 static void main(String args[]) { //创建线程t1 Thread t1 = new Thread(new timerPrinter(1000, "Thread 1")); t1.start(); }
3. 示例
注意:当使用runnable接口时,不能像继承Thread类那样直接创建所需对象并运行,必须从Thread类的一个实例内部运行。
t1.start();
3. 线程状态
1. 五种状态
- 新建状态:线程已经被创建但尚未执行(即未调用
start()
方法) - 就绪状态:线程已经被创建(即已经处于新建状态)后,执行
start()
方法,该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。 - 运行状态:就绪状态的线程获取了CPU,执行程序代码(即
run()
方法) - 阻塞状态:程序因某种原因不会被分配CPU,无法继续运行。
- 死亡状态:线程
run()
方法执行完了或者因异常退出了run()
方法,该线程结束生命周期
2. 阻塞详解
其中阻塞状态可以由下面5种原因导致:
- 调用sleep(long millis),使线程进入睡眠状态。
- 用suspend()暂停了线程的执行,除非收到resume()消息恢复。
- 用wait()方法暂停了线程的执行,除非收到notify()或notifyAll()消息恢复。
- 线程正在等待一些I/O操作。
- 运行的线程在获取对象的同步锁,而该同步锁被别的线程占用。
3. 状态转换
0 0
- 【Java多线程】多线程死锁
- Java 多线程
- java 多线程
- java多线程
- JAVA多线程
- java多线程
- JAVA多线程
- java多线程
- JAVA 多线程
- Java多线程
- java多线程
- JAVA 多线程
- Java 多线程
- Java 多线程
- java多线程
- Java 多线程
- Java多线程
- java 多线程
- **Android 图片处理系列:图片压缩处理
- $.ajax()方法详解
- 前缀、中缀、后缀表达式
- PAT 1001. A+B Format (20)
- quartz 企业级
- Java-多线程
- ECharts is not Loaded解决方案
- centos设置静态IP
- 小女子初来乍到!给各位IT大神带来工作福利~
- NanoApe Loves Sequence Ⅱ(尺取法(技巧))
- 从oracle 9i导出->11g导入 ,遇到ORA-39213: Metadata processing is not available
- shiro动态授权
- ExtJs window 备注
- 算法细节系列(16):深度优先搜索