java核心技术之线程

对于多线程的应用程序,每个任务在一个线程中执行,这样看起来多个任务可以同时执行,其实本质也就是线程之间的相互切换,竞争CPU的使用权。
1. 创建线程的方式
(1) 通过继承Thread类创建线程。这种方式是将线程任务(及run方法)写在线程体中。

class MyThread extends Thread{
     
	public static void main(String[] args){
     
		MyThread thread = new MyThread();
		thread.start();
	}
	public void run(){
     
		// 任务代码
	}
}

(2) 第二种方式是通过Runnable接口创建线程。这种方式是将线程任务和线程本身分离。因为Runnable接口时函数式接口(及该接口只有一个方法),所以可以使用lambda表达式创建线程任务。

class MyThread{
     
	public static void main(String[] args){
     
		 Runnable task = () -> {
     
			// 任务代码
		}
		Thread thread = new Thread(task);
		thread.start();
	}
}

2. 线程状态
线程状态大致可以分为五类:新建,就绪(可运行),阻塞,等待,终止。其中阻塞,等待,计时等待基本属于一种状态,只是他们产生的原因有所区别。
(1) 新建状态
当一个线程被创建出来时,如new Thread®,此线程就处于新建状态。当前状态的线程还没有被启动,即没有CPU的执行权限。

(2) 就绪(可运行)状态
当一个线程调用了start方法之后,就进入了运行状态。当前状态的线程可能还没有获取到CPU的使用权限,但是它有获取CPU使用权限的资格。相当于处于一种竞争阶段,即和其他线程竞争CPU使用权。

(3) 阻塞和等待
当一个线程视图获取一个对象锁时,而这个锁又被其他线程占有,那么当前线程将处于一种阻塞的状态。当所有其他线程都释放了这个锁,并且线程调度器允许当前线程获取该锁时,它就会变为非阻塞状态。
当线程调用Object.wait(),Thread.join(),Thread.sleep(time),或者java.util.concurrent库中Lock或Condition时,当前线程就会进入一种等待状态。
(4) 终止
线程终止的方式有两种:其一是run方法执行完成正常退出,线程自然终止。其二是run方法执行时出现异常,使线程意外终止。

你可能感兴趣的:(多线程,java,thread,并发编程)