【并发编程的艺术读书笔记】创建线程的四种方式
发布人:shili8
发布时间:2024-11-19 03:54
阅读次数:0
**并发编程的艺术读书笔记**
**创建线程的四种方式**
在并发编程中,创建线程是非常重要的一步。有多种方法可以创建线程,我们将分别介绍以下四种方式:
###1. 继承Thread类最简单的方式就是继承Thread类,然后重写run()方法。在这个方法中,你可以编写需要执行的代码。
javapublic class MyThread extends Thread { @Override public void run() { System.out.println("Hello, World!"); } public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); // 启动线程 } }
###2. 实现Runnable接口继承Thread类虽然简单,但如果需要执行的代码比较复杂,可能会导致类变得臃肿。这种情况下,可以实现Runnable接口,然后将其传递给Thread对象。
javapublic class MyRunnable implements Runnable { @Override public void run() { System.out.println("Hello, World!"); } public static void main(String[] args) { Thread thread = new Thread(new MyRunnable()); thread.start(); // 启动线程 } }
###3. 使用Callable接口如果需要从线程中返回值,可以使用Callable接口。这个接口比Runnable接口多了一个call()方法。
javapublic class MyCallable implements Callable{ @Override public String call() throws Exception { System.out.println("Hello, World!"); return "Hello, World!"; } public static void main(String[] args) throws InterruptedException, ExecutionException { ExecutorService executor = Executors.newSingleThreadExecutor(); Future future = executor.submit(new MyCallable()); String result = future.get(); // 等待线程执行完成 System.out.println(result); executor.shutdown(); } }
###4. 使用线程池使用线程池可以更高效地管理线程。线程池会重用已经创建的线程,避免频繁创建和销毁线程。
javapublic class MyRunnable implements Runnable { @Override public void run() { System.out.println("Hello, World!"); } public static void main(String[] args) throws InterruptedException { ExecutorService executor = Executors.newFixedThreadPool(5); // 创建一个固定大小的线程池 for (int i =0; i < 10; i++) { executor.submit(new MyRunnable()); // 提交任务到线程池 } executor.shutdown(); } }
**总结**
创建线程有多种方式,选择合适的方式取决于具体需求。继承Thread类和实现Runnable接口是最简单的方式,但如果需要返回值或高效地管理线程,可以使用Callable接口和线程池。