📜  Java并发-主要操作(1)

📅  最后修改于: 2023-12-03 15:02:04.567000             🧑  作者: Mango

Java并发-主要操作

在Java中,实现并发(concurrency)的主要操作包括以下几个方面:

  1. 线程的创建与销毁
  2. 线程的同步与互斥
  3. 线程的通信与协作
  4. 线程池的使用

下面分别介绍这几个方面的操作。

线程的创建与销毁

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();