线程的状态:
1.线程也有固定的操作状态:
创建状态:准备好了一个多线程的对象(也就是new出来一个Thread对象)
就绪状态:调用了start()方法,等待CPU进行调度(等待CPU分配资源的状态)
运行状态:执行run()方法(当CPU分配好资源或CPU已经进行调度,此时处于运行状态)
阻塞状态:暂时停止执行,可能将资源交给其他线程使用(可再恢复到运行状态)
终止状态(死亡状态):线程销毁(最终当整个线程执行完毕之后,线程自动销毁)
线程的常用方法:
线程的常用方法大都存在于Thread类当中,所以大多时候我们通过Thread类进行调用。
1.取得线程名称
getName()
2.取得当前线程对象
currentThread()
3.判断线程是否启动
isAlive()
4.线程的强行运行
join()
5.线程的休眠
sleep()
6.线程的礼让(针对声明周期是非常重要的)
yield()
代码演示:(1、2)
package com.yeqc.thread; class RunableDemo implements Runnable{ private String name; public RunableDemo(String name) { this.name = name; } @Override public void run() { for (int i = 0; i < 50; i++) { System.out.println("当前线程对象:"+Thread.currentThread().getName()); } } } public class ThreadDemo02 { public static void main(String[] args) { RunableDemo r1 = new RunableDemo("A"); RunableDemo r2 = new RunableDemo("B"); Thread t1 = new Thread(r1); Thread t2 = new Thread(r2); t1.start(); t2.start(); } }
运行结果:
当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-0 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1 当前线程对象:Thread-1
代码演示:(3.判断线程是否启动)
package com.yeqc.thread; class RunableDemo implements Runnable{ private String name; public RunableDemo(String name) { this.name = name; } @Override public void run() { for (int i = 0; i < 50; i++) { System.out.println(name+":"+i); } } } public class ThreadDemo02 { public static void main(String[] args) { RunableDemo r = new RunableDemo("A"); Thread t = new Thread(r); System.out.println(t.isAlive()); t.start(); System.out.println(t.isAlive()); } }
运行结果:
false true A:0 A:1 A:2 A:3 A:4 A:5 A:6 A:7 A:8 A:9 A:10 A:11 A:12 A:13 A:14 A:15 A:16 A:17 A:18 A:19 A:20 A:21 A:22 A:23 A:24 A:25 A:26 A:27 A:28 A:29 A:30 A:31 A:32 A:33 A:34 A:35 A:36 A:37 A:38 A:39 A:40 A:41 A:42 A:43 A:44 A:45 A:46 A:47 A:48 A:49
代码演示(4.线程的强行运行)
package com.yeqc.thread; class RunableDemo implements Runnable{ private String name; public RunableDemo(String name) { this.name = name; } @Override public void run() { for (int i = 0; i < 50; i++) { System.out.println(name+":"+i); } } } public class ThreadDemo02 { public static void main(String[] args) { RunableDemo r = new RunableDemo("A"); Thread t = new Thread(r); t.start(); for(int i=0; i<50; i++){ if (i>10) { try { t.join(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("主线程:"+i); } } }
运行结果:
主线程:0 A:0 主线程:1 A:1 主线程:2 A:2 主线程:3 A:3 主线程:4 A:4 主线程:5 A:5 主线程:6 A:6 主线程:7 A:7 主线程:8 A:8 主线程:9 A:9 主线程:10 A:10 A:11 A:12 A:13 A:14 A:15 A:16 A:17 A:18 A:19 A:20 A:21 A:22 A:23 A:24 A:25 A:26 A:27 A:28 A:29 A:30 A:31 A:32 A:33 A:34 A:35 A:36 A:37 A:38 A:39 A:40 A:41 A:42 A:43 A:44 A:45 A:46 A:47 A:48 A:49 主线程:11 主线程:12 主线程:13 主线程:14 主线程:15 主线程:16 主线程:17 主线程:18 主线程:19 主线程:20 主线程:21 主线程:22 主线程:23 主线程:24 主线程:25 主线程:26 主线程:27 主线程:28 主线程:29 主线程:30 主线程:31 主线程:32 主线程:33 主线程:34 主线程:35 主线程:36 主线程:37 主线程:38 主线程:39 主线程:40 主线程:41 主线程:42 主线程:43 主线程:44 主线程:45 主线程:46 主线程:47 主线程:48 主线程:49
代码演示(5.线程的休眠)
package com.yeqc.thread; class RunableDemo implements Runnable{ private String name; public RunableDemo(String name) { this.name = name; } @Override public void run() { for (int i = 0; i < 50; i++) { try { Thread.sleep(1000); System.out.println(name+":"+i); } catch (InterruptedException e) { e.printStackTrace(); } } } } public class ThreadDemo02 { public static void main(String[] args) { RunableDemo r = new RunableDemo("A"); Thread t = new Thread(r); t.start(); } }
运行结果(每1s执行一次)
A:0 A:1 A:2 A:3 A:4 A:5 A:6 A:7 A:8 A:9 A:10 A:11 A:12 A:13 A:14 A:15 A:16 A:17 A:18 A:19 A:20 A:21 A:22 A:23 A:24 A:25 A:26 A:27 A:28 A:29 A:30 A:31 A:32 A:33 A:34 A:35 A:36 A:37 A:38 A:39 A:40 A:41 A:42 A:43 A:44 A:45 A:46 A:47 A:48 A:49
代码演示(6.线程的礼让)
package com.yeqc.thread; class RunableDemo implements Runnable{ private String name; public RunableDemo(String name) { this.name = name; } @Override public void run() { for (int i = 0; i < 50; i++) { System.out.println(name+":"+i); if (i == 10) { System.out.println("礼让"); Thread.yield(); } } } } public class ThreadDemo02 { public static void main(String[] args) { RunableDemo r1 = new RunableDemo("A"); RunableDemo r2 = new RunableDemo("B"); Thread t1 = new Thread(r1); Thread t2 = new Thread(r2); t1.start(); t2.start(); } }
运行结果:
A:0 B:0 A:1 A:2 A:3 B:1 A:4 B:2 A:5 B:3 A:6 B:4 A:7 B:5 A:8 B:6 A:9 B:7 A:10 B:8 礼让 B:9 A:11 B:10 礼让 A:12 B:11 A:13 B:12 A:14 B:13 A:15 B:14 A:16 B:15 A:17 B:16 A:18 B:17 A:19 B:18 A:20 B:19 A:21 B:20 A:22 B:21 A:23 B:22 A:24 B:23 A:25 B:24 A:26 B:25 A:27 A:28 B:26 A:29 B:27 A:30 B:28 A:31 B:29 A:32 B:30 A:33 B:31 A:34 B:32 A:35 B:33 A:36 B:34 A:37 B:35 A:38 B:36 A:39 B:37 A:40 B:38 A:41 B:39 A:42 B:40 A:43 B:41 A:44 B:42 A:45 A:46 B:43 B:44 B:45 B:46 A:47 A:48 B:47 B:48 B:49 A:49
原文地址:http://11317783.blog.51cto.com/11307783/1769277