Java多线程机制1
程序员文章站
2022-05-04 18:19:13
...
进程与线程
- 进程是程序的一次动态执行过程。
- 一个进程中可能有多个线程,线程是运行在进程中的”小进程”。
- 多进程可以共享操作系统的资源,而多线程可以共享进程中的某些内存单元(包括代码与数据)。
Java中的线程
- 多线程是指一个应用程序中同时存在几个执行体,按几条不同的执行线索共同工作的情况。
- 多线程的实质是Java虚拟机快速地控制从一个线程切换到另一个线程。
- JVM首先发现main方法建立主线程,其它线程是在主线程中再创建的,JVM在主线程和其它线程之间轮流切换,保证每个线程都有机会使用CPU资源,JVM在所有线程结束后才会结束Java应用程序。
- Java使用Thread类及其子类的对象来表示线程。
- 新建线程:已经具有相应的内存空间和其它资源
- 运行线程:线程调用start()方法通知JVM安排切换,继承Thread抽象类并重写run()方法赋予线程具体使命。
- 中断线程:线程切换导致中断、sleep()方法中断、wait()和noftify()方法中断、操作阻塞中断。
- 死亡线程:自然死亡、强制死亡。
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类与线程的创建
- 利用Thread子类创建线程
可以使得子类增加新的属性和方法 - 利用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 多线程等待/通知机制
下一篇: Java 多线程测试 笔记(一)