多线程
一、并发与并行
并发:指两个或多个事件在同一个时间段内发生(交替执行)。
并行:指两个或多个事件在同一时刻发生(同时执行)。
二、进程和线程
进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程。进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。
线程:线程是进程中的一个执行单元。负责当前进程中程序的执行。一个进程至少有一个线程。一个进程中可以有多个线程即多线程程序。
三、线程调(diao)度
1.分时调度:
所有线程轮流使用CPU,平均分配每个线程占用CPU的时间。
2.抢占式调度:
优先让优先级高的线程使用CPU。
四、主线程
Java中主线程是指执行主方法(main)的线程。
五、多线程
1.创建方法
创建多线程有两种方法。
(1)将类声明为Thread类的子类。该子类应该重写Thread的run()方法。
(2)将类声明实现Runnable接口。该类应该实现run()方法。然后将此类对象作为Thread类构造函数的一个参数。最后调用Thread对象的start()方法实现多线程。
2.常用方法
(1)获取当前线程的名称。
① 在继承Thread类的自定义线程类中使用getName()方法可以获取当前线程的名称。
② Thread.currentThread()方法是一个静态方法,可以获取到当前线程的实例对象,然后利用线程的getName()方法可以获取到当前线程名称。
(2)设置当前线程的名称。
① 利用Thread类中的setName(String name)设置线程名称。
② 利用Thread类带参构造函数设置线程名称。
(3)如何让当前线程“休眠”指定一段事件。
Thread类有一个静态方法——sleep
3.示列代码:
package com.lanyue.day22;
public class Car extends Thread {
public Car(String name){
super(name);
}
@Override
public void run(){
for(int i = 0;i < 5;i++){
try{
Thread.sleep(1000);
}catch (Exception e){
System.out.println("发生异常");
}
System.out.println(getName() + "已经行走了" + i + "km路程===>[" + Thread.currentThread().getName() + "]");
}
}
}
package com.lanyue.day22;
public class Driver implements Runnable {
@Override
public void run() {
for(int i = 0;i < 5;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("第一个司机第" + i + "次报数中。");
}
}
}
package com.lanyue.day22;
public class Person {
public static void main(String[] args) {
Car one = new Car("宝马");
one.start();
Driver two = new Driver();
new Thread(two).start();
new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0;i < 5;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("第二个司机第" + i + "次报数中。");
}
}
}).start();
}
}