您的位置:首页 > 编程语言 > Java开发

Java多线程机制1

2020-08-11 17:10 85 查看

进程与线程

  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) { }
}
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: