Java多线程机制1

进程与线程

  1. 进程是程序的一次动态执行过程。
  2. 一个进程中可能有多个线程,线程是运行在进程中的”小进程”。
  3. 多进程可以共享操作系统的资源,而多线程可以共享进程中的某些内存单元(包括代码与数据)。

Java中的线程

  1. 多线程是指一个应用程序中同时存在几个执行体,按几条不同的执行线索共同工作的情况。
  2. 多线程的实质是Java虚拟机快速地控制从一个线程切换到另一个线程。
  3. JVM首先发现main方法建立主线程,其它线程是在主线程中再创建的,JVM在主线程和其它线程之间轮流切换,保证每个线程都有机会使用CPU资源,JVM在所有线程结束后才会结束Java应用程序。
  4. Java使用Thread类及其子类的对象来表示线程。
  5. 新建线程:已经具有相应的内存空间和其它资源
  6. 运行线程:线程调用start()方法通知JVM安排切换,继承Thread抽象类并重写run()方法赋予线程具体使命。
  7. 中断线程:线程切换导致中断、sleep()方法中断、wait()和noftify()方法中断、操作阻塞中断。
  8. 死亡线程:自然死亡、强制死亡。

Thread子类创建线程的实例

//主线程
package ch5;
public class Example12_1 {
	public static void main(String[] args) {
		SpeakElephant speakElephant;
		SpeakCar speakCar;
		//利用Thread的子类创建线程
		speakElephant = new SpeakElephant();//创建线程1
		speakCar = new SpeakCar();//创建线程2
		speakElephant.start();//启动线程1
		speakCar.start();//启动线程2
		for(int i=1;i<=15;i++) {
			System.out.println("主人"+i+"  ");
		}
	}
}
//SpeakElephant线程
package ch5;
public class SpeakElephant extends Thread{
//继承并重写抽象方法
	public void run() {
		for(int i=1;i<=20;i++) {
			System.out.print("大象"+i+"  ");
		}
	}
}
//SpeakCar线程
package ch5;
public class SpeakCar extends Thread{
	public void run() {
		for(int i=1;i<=20;i++) {
			System.out.print("轿车"+i+"  ");
		}
	}
}

在这里插入图片描述
在这里插入图片描述
运行多次发现运行结果不尽相同,由此可知输出结果依赖于当前CPU资源的使用情况。
在循环运行之前安排线程,可能会在循环中切换到其它线程运行,然后再切换回来继续循环。

Thread类与线程的创建

  1. 利用Thread子类创建线程
    可以使得子类增加新的属性和方法
  2. 利用Thread创建线程
    构造方法:Thread(Runnable target),参数是一个Runnable类型的接口,在创建线程时必须向构造方法的参数传递一个实现该接口类的实例。

Thread创建线程的实例

package ch12;
public class Example12_2 {
	public static void main(String[] args) {
		House house = new House();
		house.setWater(10);
		Thread dog,cat;
		dog = new Thread(house);
		cat = new Thread(house);
		dog.start();
		cat.start();
	}
}
package ch12;
public class House implements Runnable{
	int waterAmount;
	public void setWater(int w) {
		waterAmount = w;
	}
	public void run() {
		int m = 1;
		while(true) {
			if(waterAmount<=0) {
				return;
			}
			waterAmount = waterAmount-m;
			System.out.println("剩"+waterAmount+"克:");
			try{Thread.sleep(200);
			}
		    catch(InterruptedException e) { }
		}
	}
}

在这里插入图片描述

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页