1、继承Thread类
2、实现Runnable接口
3、实现Callable接口
4、使用Lock、Semaphore等同步工具类
5、使用Condition接口
6、使用CountDownLatch、CyclicBarrier等并发工具类
7、使用Future和ExecutorService
8、使用Socket编程进行进程间通信
9、使用RMI(远程方法调用)进行跨网络通信
下面详细介绍这几种方式:
1、继承Thread类
继承Thread类是实现多线程最直接的方式,创建一个新类,继承自Thread类,然后重写run()方法,在run()方法中编写线程要执行的任务,创建该类的对象并调用start()方法启动线程。
class MyThread extends Thread { @Override public void run() { // 线程执行的任务 } } public class Main { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); } }
2、实现Runnable接口
实现Runnable接口同样可以实现多线程,创建一个新类,实现Runnable接口,然后重写run()方法,在run()方法中编写线程要执行的任务,创建该类的对象并将其作为参数传递给Thread类的构造方法,然后调用Thread类的start()方法启动线程。
class MyRunnable implements Runnable { @Override public void run() { // 线程执行的任务 } } public class Main { public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); Thread thread = new Thread(myRunnable); thread.start(); } }
3、实现Callable接口
实现Callable接口可以获取线程执行任务的结果,创建一个新类,实现Callable接口,然后重写call()方法,在call()方法中编写线程要执行的任务,创建该类的对象并将其作为参数传递给FutureTask类的构造方法,然后将FutureTask对象作为参数传递给ExecutorService类的submit()方法提交任务,最后通过FutureTask对象的get()方法获取线程执行任务的结果。
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; class MyCallable implements Callable<Integer> { @Override public Integer call() throws Exception { // 线程执行的任务,返回结果类型为Integer } } public class Main { public static void main(String[] args) throws InterruptedException, ExecutionException, TimeoutException { ExecutorService executorService = Executors.newSingleThreadExecutor(); MyCallable myCallable = new MyCallable(); FutureTask<Integer> futureTask = new FutureTask<>(myCallable); executorService.submit(futureTask); Integer result = futureTask.get(10, TimeUnit.SECONDS); // 设置超时时间,单位为秒 executorService.shutdown(); // 关闭线程池 } }
4、使用Lock、Semaphore等同步工具类
Lock和Semaphore是Java提供的基本同步工具类,用于控制多个线程对共享资源的访问,可以使用Lock或Semaphore来实现线程间的互斥访问共享资源,从而避免数据不一致的问题,可以使用Lock实现生产者-消费者模式中的互斥访问缓冲区。
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.SyncQueue; import java.util.concurrent.locks.WaitQueue; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.SyncQueue; import java.util.concurrent.locks.WaitQueue; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.SyncQueue; import java.util.concurrent.locks.WaitQueue; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; import java.util
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/132926.html