📅  最后修改于: 2023-12-03 15:02:04.567000             🧑  作者: Mango
在Java中,实现并发(concurrency)的主要操作包括以下几个方面:
下面分别介绍这几个方面的操作。
Java中创建线程有两种方式,分别是继承Thread类和实现Runnable接口。实例化后调用start()方法,线程开始执行;调用stop()方法,可以强制中止线程的运行。
// 继承Thread类
public class MyThread extends Thread {
public void run() {
// 线程执行的代码放在这里
}
}
MyThread thread = new MyThread();
thread.start();
// 实现Runnable接口
public class MyRunnable implements Runnable {
public void run() {
// 线程执行的代码放在这里
}
}
MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();
线程之间的同步是指协调线程之间的执行顺序,以保证它们能够正确地共享数据。互斥是指同一时间只能有一个线程访问某些共享资源,其他线程必须等待。
Java提供了几种机制来实现线程的同步和互斥,其中最常用的是synchronized关键字:
// 通过synchronized关键字实现线程同步和互斥
synchronized (object) {
// 线程锁定在这里,其他线程无法访问object对象
}
Java提供了多种机制来实现线程的通信和协作。其中最常用的包括wait()、notify()和notifyAll()方法。wait()方法使线程进入等待状态,notify()和notifyAll()方法则用于唤醒等待中的线程。
// 通过wait()、notify()和notifyAll()方法实现线程通信和协作
class MyThread extends Thread {
private boolean waiting = true;
public synchronized void run() {
while (waiting) {
try {
wait();
} catch (InterruptedException e) {
// 处理InterruptedException异常
}
}
// 线程执行的代码放在这里
}
public synchronized void stopWaiting() {
waiting = false;
notify();
}
}
MyThread thread = new MyThread();
thread.start();
// 另一个线程调用stopWaiting()方法唤醒正在等待的线程
thread.stopWaiting();
Java的线程池可以复用已经创建的线程,避免了创建和销毁线程的开销。线程池适用于需要频繁创建和销毁线程的场景中。
// 使用线程池实现并发处理
ExecutorService pool = Executors.newCachedThreadPool();
for (int i = 0; i < n; i++) {
pool.submit(new Runnable() {
public void run() {
// 线程执行的代码放在这里
}
});
}
pool.shutdown();