侧边栏壁纸
博主头像
再见理想博主等级

只争朝夕,不负韶华

  • 累计撰写 112 篇文章
  • 累计创建 64 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

创建线程的四种常用方式

再见理想
2022-05-29 / 0 评论 / 0 点赞 / 372 阅读 / 361 字

常用有以下几种方式

  1. 继承Thread类

  2. 实现Runnable接口,可使用lambda简洁写法

  3. 实现Callable接口

  4. 线程池创建

一,继承Thread类

继承Thread类,重写run()方法

class MyThread extends Thread {
	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName());
	}
}
	
@Test
public void threadTest() {
	MyThread myThread = new MyThread();
	myThread.start();
}

二,实现Runnable接口

实现Runnable接口,重写run()方法

class MyThread2 implements Runnable {
	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName());
	}
}

@Test
public void threadTest() {
	Thread thread2 = new Thread(new MyThread2());
	thread2.setName("MyThread2");
	thread2.start();
}

简洁写法:

new Thread(new Runnable() {		
	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName());
	}
}).start();

lambda写法:

new Thread(()-> {
	System.out.println(Thread.currentThread().getName());
}).start();

三,实现Callable接口

实现Callable接口,重写call()方法

class MyThread3 implements Callable<String> {

	@Override
	public String call() throws Exception {
		return Thread.currentThread().getName();
	}
}

@Test
public void threadTest() {
	FutureTask<String> futureTask = new FutureTask<>(new MyThread3());
        new Thread(futureTask).start();
        try {
            String futureName = futureTask.get();
            System.out.println(futureName);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
}

四,线程池创建

Executors创建线程池,只需要调用Executors中相应的便捷方法即可。

newFixedThreadPool(int nThreads)

创建固定大小的线程池

newSingleThreadExecutor()

创建只有一个线程的线程池

newCachedThreadPool()

创建一个不限线程数上限的线程池,任何提交的任务都将立即执行

向线程池提交的任务有两种
Runnable和Callable

@Test
public void threadTest() {
	ExecutorService fixedThreadPool = Executors.newFixedThreadPool(10);
	for(int i = 0; i < 10; i++){
		fixedThreadPool.execute(new Runnable() {
			@Override
			public void run() {
				//do something
			}
		});
}
0

评论区