欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java多线程机制1

程序员文章站 2022-05-04 18:19:13
...

进程与线程

  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+"  ");
		}
	}
}

Java多线程机制1
Java多线程机制1
运行多次发现运行结果不尽相同,由此可知输出结果依赖于当前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) { }
		}
	}
}

Java多线程机制1

相关标签: 笔记