多线程和并行程序设计(Java)

本文详细介绍了Java中的多线程和并行程序设计,包括线程的概念、创建线程、Thread类、线程池、线程同步、加锁同步、线程间协作以及避免死锁等关键概念和技术。文中还提到了线程状态、同步合集以及Java的Fork/Join框架,旨在帮助开发者理解并有效利用多线程提高程序的执行效率。
摘要由CSDN通过智能技术生成

多线程和并行程序设计

多线程使得程序中的多个任务可以同时执行。

Java的重要功能之一就是内部支持多线程。多线程指在同一个程序中允许同时运行多个任务。在其它许多程序设计语言中,是通过调用依赖于系统的过程或者函数来实现多线程。

线程的概念

线程是指一个任务从头到尾的执行流程。一个程序可能包含多个可以同时运行的任务。

线程提供了运行一个任务的机制,对于 Java 而言,可以在一个程序中并发地启动多个线程。这些线程可以在多处理器系统上同时运行。在单处理器系统系统中,多个线程共享单个 CPU ,多个线程共享 CPU 时间称为时间分享,操作系统负责调度及分配资源给它们。注意,这里 CPU 大部分时间都是空闲的。

多线程可以使程序反应更快,交互性更强,执行效率更高。在一些情况下,即使在单处理器系上,多线程程序的运行速度也比单线程更快。Java 对多线程程序的创建和运行,以及锁定资源以避免冲突提供了非常好的支持。

可以在程序中创建附加的线程以执行并发任务。在 Java 中,每个任务都是 Runnable 接口的一个实例,也称为可运行对象(runnable object)。线程本质上讲就是便于任务执行的对象。

创建任务和线程

一个任务类必须实现 Runnable 接口。任务必须从线程运行。

任务就是对象。为了创建任务,必须首先为任务定义一个实现 Runnable 接口的类。Runnable 接口只包含一个 run 方法。需要实现这个方法告诉系统线程将如何运行。开发一个任务类的模板如下:

//Custom task class
public class TaskClass implements Runnable{
   
	···
	public TaskClass(...){
   
	···
	}
	//Implement the run method in Runnable
	public void run(){
   
		//Tell system how to run custom thread
		···
	}
	···
}
//Client class
public class Client{
   
	···
	public void someMethod(){
   
		···
		//Create an instance of TaskClass
		TaskClass task = new TaskClass(...);
		//Create a thread
		Thread thread = new Thread(task);
		//Start a thread
		thread.start();
		···
	}	
	···
}

一旦定义一个 TaskClass ,就可以用它的构造方法创建一个任务。任务必须在线程中执行。Thread 类包含创建线程的构造方法以及控制线程的多种方法。创建一个任务后,可以创建该任务的线程,然后调用 start() 方法告诉 Java 虚拟机该线程准备运行。Java 虚拟机通过调用任务的 run() 方法执行任务。当 run() 方法执行完毕,线程就终止。

注意: 任务中的 run() 方法指明如何完成这个任务。Java 虚拟机会自动调用该方法,无需特意调用它。直接调用 run() 方法只是在同一个线程中执行该方法,而没有新方法被启动。

Thread 类

Thread 类包含为任务而创建的线程的构造方法,以及控制线程的方法。

public class Thread 
	extends Object 
	implements Runnable

Thread 类实现了 Runnable ,可以定义一个 Thread 的拓展类,并且实现 run 方法。然后,在客户端程序中创建这个类的一个对像,并且调用它的 start 方法来启动线程。但是,不推荐使用这种方法,这样设计会将任务和运行任务的机制混在一起,将任务从线程中分离出来是比较好的设计。

//Custom thread class
public class CustomThread extends Thread{
   
	···
	public CustomThread(...){
   
		···
	}
	//Override the run method in Runnable
	public void run(){
   
		//Tell system how to perform this task
		···
	}
	···
}
//Custom class
public class Client{
   
	···
	public void someMethod(){
   
		···
		//Create a thread
		CustomThread thread1 = new CustomThread(...);
		//Start a thread
		thread1.start();
		···
		//Create another thread
		CustomThread thread2 = new CustomThread(...);
		//Start a thread
		thread2.start();
		···
	}
	···
}

Thread 类包含控制线程的方法:

<
方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值