您的位置:首页 > 编程语言 > Java开发

Java多线程编程(二)操作状态与常用方法

2016-05-01 00:39 330 查看
线程的状态:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息