建立线程的四种方式(转载)

本文介绍建立线程常见的四种方式,使用了匿名内部类以使代码尽可能简洁。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

相关文章
相关标签/搜索