继承Thread类
步骤1:实现run方法
public class myThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 10000; i++) {
System.out.println("run=" + Thread.currentThread().getName());
}
}
}
步骤2:启动线程
thread.start();
实现Runnable接口
同样的。
第一步:实现run方法
public class myRunnable implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10000; i++) {
System.out.println("run=" + Thread.currentThread().getName());
}
}
}
第二步:将runnable对象构造成thread对象,再调用thread的start()方法
myRunnable runnable =new myRunnable();
Thread thread = new Thread(runnable) ;
thread.start();
本质上没有区别,因为thread继承了runnable接口。
将myRunnable对象传进去,相当于重写thread的run方法。
只是在设计模式上有优劣。
Runnable 接口源码
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
然后再看Thread类中的run方法。这个run方法如果重写,子类就调用子类的run方法,如果不重写,就调用target的run方法。
@Override
public void run() {
if (target != null) {
target.run();
}
}
初始化中target的run方法,不就是runnable中的run方法吗?
public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(), 0);
}
实现Callable接口通过FutureTask包装器来实现的线程
class Tickets<Object> implements Callable<Object> {
@Override
public Object call() {
System.out.println(Thread.currentThread().getName());
return null;
}
}
public class TicketsTest {
@Test
public void call() {
Callable<Object> oneCallable = new Tickets<Object>();
FutureTask<Object> oneTask = new FutureTask<Object>(oneCallable);
Thread t =new Thread(oneTask);
System.out.println(Thread.currentThread().getName());
t.start();
}
}
线程池
public class myRunnable implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10000; i++) {
System.out.println("run=" + Thread.currentThread().getName());
}
}
}
@Test
public void run1() {
ExecutorService executorService = Executors.newFixedThreadPool(5);
for(int i = 0; i<POOL_NUM; i++)
{
myRunnable thread = new myRunnable();
//Thread.sleep(1000);
executorService.execute(thread);
}
//关闭线程池
executorService.shutdown();
本文详细介绍了在Java中创建和管理线程的三种主要方式:继承Thread类、实现Runnable接口以及使用Callable接口配合FutureTask。对比了这三种方式的设计模式优劣,并展示了如何利用线程池进行高效的线程管理。
474

被折叠的 条评论
为什么被折叠?



