创建线程的四种方式和具体的实现原理

it2023-07-27  70

创建线程共有四种方式: 1.继承Thread类 2.实现Runnable接口 3.实现Callable接口 4.使用Executors工具类创建线程池 具体实现方法如下: 1.继承Thread类:定义一个MyThread子类,重写run方法,继承Thread类,调用子类实例的start()方法启动线程

public class MyThread extends Thread { @Override public void run(){ System.out.println(Thread.currentThread().getName()+"run()方法正在执行。。。。"); } public static void main(String[] args) { MyThread myThread = new MyThread (); myThread.start(); System.out.println(Thread.currentThread().getName()+"main()方法执行结束。"); } }

执行结果:

mainmain()方法执行结束。 Thread-0run()方法正在执行。。。。

2.实现Runnable接口:编写MyRunnable类实现Runnable接口,重写run()方法,声明式创建Thread类(该类才是真正的线程对象),并调用Thread 的start()方法

public class MyRunnale implements Runnable{ @Override public void run(){ System.out.println(Thread.currentThread().getName()+"run()方法正在执行。。。。"); } public static void main(String[] args) { MyRunnale myRunnable = new MyRunnale(); Thread myThread = new Thread (myRunnable); myThread.start(); System.out.println(Thread.currentThread().getName()+"main()方法执行结束。"); } }

执行解果:

mainmain()方法执行结束。 Thread-0run()方法正在执行。。。。

3.实现Callable接口:创建实现Callable接口的实现类MyCallable,以MyCallable为参数穿件FutureTask对象,以FutureTask为对象创建线程对象,调用线程对象的start()方法

public class MyCallable implements Callable{ @Override public Object call() throws Exception { System.out.println(Thread.currentThread().getName()+" call()方法正在执行。。。。"); return 666; } public static void main(String[] args) { MyCallable myCallable = new MyCallable(); FutureTask futureTask = new FutureTask(myCallable); Thread thread = new Thread(futureTask); thread.start(); try { thread.sleep(500); try { System.out.println("call()方法执行结束,返回结果:"+futureTask.get()); } catch (ExecutionException e) { e.printStackTrace(); } } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"main()方法执行结束。"); } }

执行结果:

Thread-0 call()方法正在执行。。。。 call()方法执行结束,返回结果:666 mainmain()方法执行结束。

4.使用Executors工具类创建线程池 Executors提供了一系列工厂方法用于创建线程池,主要有四种: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。 newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行 下一篇着重记录一下线程的想关内容。

最新回复(0)