找回密码
 会员注册
查看: 30|回复: 0

线程创建的4种方式

[复制链接]

5

主题

0

回帖

16

积分

新手上路

积分
16
发表于 2024-9-12 23:48:13 | 显示全部楼层 |阅读模式
线程创建的4种方式方式一:继承Thread类方式二:实现Runnable接口方式三:实现Callable接口方式四:使用线程池💖TheBegin💖点点关注,收藏不迷路💖方式一:继承Thread类原理:通过继承java.lang.Thread类并覆盖其run方法,可以创建新的线程。当调用线程的start()方法时,会启动一个新的线程来执行run方法中的代码。示例代码:publicclassMyThreadextendsThread{@Overridepublicvoidrun(){System.out.println("线程运行中:"+Thread.currentThread().getName());}publicstaticvoidmain(String[]args){MyThreadthread=newMyThread();thread.start();}}1234567891011优缺点:优点:实现简单,易于理解。缺点:Java不支持多重继承,如果当前类已经继承了其他类,则无法再继承Thread类。方式二:实现Runnable接口原理:实现java.lang.Runnable接口,并将该实现类的实例传递给Thread类的构造器。这种方式与继承Thread类相比更加灵活,因为Java支持实现多个接口。示例代码:publicclassMyRunnableimplementsRunnable{@Overridepublicvoidrun(){System.out.println("线程运行中:"+Thread.currentThread().getName());}publicstaticvoidmain(String[]args){Threadthread=newThread(newMyRunnable());thread.start();}}1234567891011优缺点:优点:灵活性高,支持实现多个接口,且易于与线程池等高级功能结合使用。缺点:相对继承Thread类来说,代码稍显繁琐。方式三:实现Callable接口原理:实现java.util.concurrent.Callable接口与实现Runnable接口类似,但Callable可以返回一个结果,并且可以抛出异常。Callable通常与FutureTask一起使用,FutureTask包装了Callable或Runnable对象,提供了更为强大的功能,比如可以检查计算是否完成,等待计算完成,并检索计算结果。示例代码:importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.FutureTask;publicclassMyCallableimplementsCallable{@OverridepublicIntegercall()throwsException{return123;}publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{FutureTaskfutureTask=newFutureTask(newMyCallable());Threadthread=newThread(futureTask);thread.start();//等待计算完成并获取结果System.out.println("计算结果是:"+futureTask.get());}}12345678910111213141516171819优缺点:优点:支持返回结果和抛出异常,功能更强大。缺点:相比Runnable,实现稍显复杂,且通常与FutureTask一起使用,增加了代码的复杂性。方式四:使用线程池原理:线程池是管理一组工作线程的资源池,用于执行异步任务。使用线程池可以减少线程创建和销毁的开销,提高系统的响应速度和吞吐量。Java提供了Executors工厂类来创建不同类型的线程池。示例代码:importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassThreadPoolExample{publicstaticvoidmain(String[]args){//创建一个固定大小的线程池ExecutorServiceexecutor=Executors.newFixedThreadPool(5);for(inti=0;i{System.out.println("线程运行中,任务ID:"+taskId);});}//关闭线程池(不再接受新任务,但已提交的任务会继续执行)executor.shutdown();}}12345678910111213141516171819优缺点:优点:减少线程创建和销毁的开销,提高资源利用率,易于管理和监控线程。缺点:需要合理配置线程池。💖TheEnd💖点点关注,收藏不迷路💖
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-26 12:20 , Processed in 0.949611 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表