线程的状态:
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