线程的状态:

  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