本文介绍建立线程常见的四种方式,使用了匿名内部类以使代码尽可能简洁。java
import org.junit.Test;
import java.util.concurrent.*;segmentfault
public class ThreadTest {框架
/** * 继承Thread类 */ @Test public void test01() { new Thread() { @Override public void run() { System.out.println(Thread.currentThread().getName() + " is running..."); } }.start(); } /** * 实现Runnable接口 */ @Test public void test02() { new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + " is running..."); } }).start(); } /** * 使用Callable和Future建立线程 * 步骤 * 建立实现Callable接口的类myCallable * 以myCallable为参数建立FutureTask对象 * 将FutureTask做为参数建立Thread对象 * 调用线程对象的start()方法 * * @throws InterruptedException * @throws ExecutionException */ @Test public void test03() throws InterruptedException, ExecutionException { FutureTask<String> fu = new FutureTask(new Callable<String>() { @Override public String call() { System.out.println(Thread.currentThread().getName() + " running..."); return Thread.currentThread().getName() + " result returned."; } }); new Thread(fu).start(); Thread.sleep(1000); System.out.println(fu.get()); } /** * 使用Executor框架建立线程池 * Executors提供了一系列工厂方法用于创先线程池,返回的线程池都实现了ExecutorService接口。 * 主要有newFixedThreadPool,newCachedThreadPool,newSingleThreadExecutor,newScheduledThreadPool,后续详细介绍这四种线程池 * * @param args */ public static void main(String[] args) { for (int i = 0; i < 10; i++) { Executors.newSingleThreadExecutor().execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + " is running"); } }); } }
}ide
这是一个技术和财经都会分享的公众号url
————————————————
版权声明:本文为CSDN博主「ycfn97」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处连接及本声明。
原文连接:https://blog.csdn.net/ycfn97/....net