Java中的多线程

Java 中的多线程简介:

  1. Java 中的线程是通过 java.lang.Thread 类来实现的, 每一个 Thread 对象, 代表了一个新的主线程的线程.

  2. Java 虚拟机启动时会有一个由主方法(public static void main(){})所定义的线程.

  3. 可以通过创建 Thread 实例来创建新的线程.

  4. 每个线程都是通过某个特定 Thread 对象所对应的方法 run() 来完成其操作的,方法 run() 称为一个线程体.

  5. 通过调用 Thread 类的 Start() 方法来启动一个线程(每一个 Thread 对象代表一个新的线程).

线程的启动与创建:

  1. 所定义的线程类实现 Runnable 接口, 然后将其传递给 Thread 的构造函数, 创建一个 Thread 对象(推荐使用此方法):

    ① 定义线程类实现 Runnable 接口;

    ② Thread myThread = new Thread(target) // target 为 实现了 Runnable 的接口类型;

    ③ Runnable 中只有一个方法:public void run(); // 用来定义线程运行体;

    ④ 使用 Runnable 接口可以为多个线程提供共享的数据;

    ⑤ 在实现 Runnable 接口的类的 run 方法中可以使用 Thread 的静态方法:

      public static Thread currentThread(); // 获取当前线程的引用.

  2. 直接继承 Thread 类:

    ① 可以定义一个 Thread 的子类, 并重写 run 方法,如:

      class MyThread extends Thread {

        public void run(){

        }
                 }

    ② 之后生成该类的对象

      MyThread myThread = new MyThread(....);

Demo_1:

// 第一种方法:直接实现 Runnable 接口
class TestThread {
	public static void main(String[] args){
		Rnnner r  = new Rnnner();
		// r.run() 如果直接这样写,就变成了普通方法的调用
		Thread tt = new Thread(r);
		tt.start();
		for(int i = 0; i < 5; i++) {
			System.out.println("Main Thread------:"+i);
		}
	}
}

class Rnnner implements Runnable {
	public void run() {
		for(int i = 0; i < 5; i++) {
			System.out.println("Runner--------:" + i);
		}
	} 
}

 运行结果:

Main Thread------:0
Runner--------:0
Main Thread------:1
Runner--------:1
Runner--------:2
Runner--------:3
Runner--------:4
Main Thread------:2
Main Thread------:3
Main Thread------:4

可以从运行结果中看出,二者交替输出,两个线程各执行一会.

Demo_2:

// 第二种方法:直接继承 Thread 类
public class TestThread {
	public static void main(String[] args) {
		Runner r = new Runner();
		r.start();
		for(int i = 0; i < 6; i++) {
			System.out.println("Main Thread-----:"+i);
		}
	}
}
class Runner extends Thread {
	public void run() {
		for(int i = 0; i< 8 ; i ++){
			System.out.println("Runner-----:"+i);
		}
	}
}

 运行结果:

Main Thread-----:0
Runner-----:0
Main Thread-----:1
Runner-----:1
Main Thread-----:2
Runner-----:2
Main Thread-----:3
Main Thread-----:4
Main Thread-----:5
Runner-----:3
Runner-----:4
Runner-----:5
Runner-----:6
Runner-----:7

同一个线程类, 可以启动多个线程:

Demo_3:

class TT implements Runnable {
	int count = 0;
	@Override
	public void run() {
		for(int i = 1; i <= 3; i++){
			System.out.println("Num. " +i);
			count ++;
		}
	}	
}
class TestThread {
	public static void main(String[] args) {
		TT tt = new TT();
		Thread t1 = new Thread(tt);
		Thread t2 = new Thread(tt);
		t1.start();
		t2.start();
		System.out.println("tt.count = "+tt.count);
	}
}

运行结果:

tt.count = 0
Num. 1
Num. 1
Num. 2
Num. 3
Num. 2
Num. 3

Demo_4:

class TT implements  Runnable {
	@Override
	public void run() {
		for(int i = 1; i <= 7; i++){
			if(i % 3 == 0 && i != 0){
				try {
					Thread.sleep(2000);
				} catch (InterruptedException e) {
				}
				System.out.println("Num. "+i);
			}
		}
	}
}
class TestThread {
public static void main(String[] args) {
	TT tt = new TT();
	Thread t1 = new Thread(tt);
	t1.start();
	}
}

 运行结果:

Num. 3
Num. 6

原文地址:https://www.cnblogs.com/bosongokay/p/6822781.html