Java util concurrent及基本线程原理简介
线程基本概念
- 线程是操作系统进行任务调度和执行的基本单位,一个进程可以拥有多个线程。
- 线程是轻量级的,相对于进程来说占用较少的资源。
- 线程也是并发编程的基石,不同的线程可以同时执行不同的任务,提高了应用程序的并发性。
线程的状态
- 新建状态
- 线程是尚未启动的状态,实例化了一个Thread对象,还未调用start方法。
- 就绪状态
- 线程已经被创建,可以调用start方法启动线程,在就绪队列等待执行。
- 运行状态
- 线程被调度后,进入运行状态,执行对应的操作。
- 阻塞状态
- 线程执行某些操作后,可能会进入阻塞状态,比如调用sleep、wait、join、park等方法,被其他线程阻塞。
- 死亡状态
- 线程执行完毕或者出现未捕获的异常,线程就会死亡。
Java util concurrent
Java util concurrent是Java多线程编程中使用的工具包,通过它,开发者可以更加方便地编写高并发的应用程序,例如使用线程池、并发集合等。
线程池
线程池可以维护线程池中的线程,避免频繁创建和销毁线程带来的性能消耗,通过线程的复用提高应用程序的响应能力。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolDemo {
public static void main(String[] args) {
// 创建一个可重用固定线程数的线程池
ExecutorService executor = Executors.newFixedThreadPool(3);
// 创建任务
Runnable task = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
System.out.println("线程名:" + Thread.currentThread().getName() + " 执行任务完成");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
// 执行任务
for (int i = 0; i < 5; i++) {
executor.execute(task);
}
// 关闭线程池
executor.shutdown();
}
}
在上面的示例代码中,创建了一个可重用固定线程数为3的线程池,然后创建一个任务并提交到线程池中执行,最后关闭线程池。
并发集合
并发集合是多个线程共享的集合,通过加锁等措施保证线程安全性,例如ConcurrentHashMap、ConcurrentLinkedQueue等。
import java.util.concurrent.ConcurrentLinkedQueue;
public class ConcurrentCollectionDemo {
public static void main(String[] args) {
ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>();
// 写入数据
queue.offer("value1");
queue.offer("value2");
queue.offer("value3");
// 读取数据
while (!queue.isEmpty()) {
String value = queue.poll();
System.out.println(value);
}
}
}
在上面的示例代码中,创建了一个ConcurrentLinkedQueue并写入3个元素,然后通过循环读取元素并打印出来。
总结
本文对Java多线程编程中的线程基本概念、线程状态、Java util concurrent工具包以及线程池、并发集合等内容进行了简单介绍,并通过示例代码进行了说明,希望对Java多线程编程的学习有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java util concurrent及基本线程原理简介 - Python技术站