当前位置:网站首页 > 技术博客 > 正文

java线程创建的三种方式



方式一:继承于Thread类

步骤:
1.创建一个继承于Thread类的子类
2.重写Thread类的run() --> 将此线程执行的操作声明在run()中
3.创建Thread类的子类的对象
4.通过此对象调用start()执行线程



示例代码(遍历100以内的所有的偶数):

 
  

输出结果(部分):
在这里插入图片描述

方式二:实现Runnable接口

步骤:
1.创建一个实现了Runnable接口的类
2.实现类去实现Runnable中的抽象方法:run()
3.创建实现类的对象
4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
5.通过Thread类的对象调用start()
① 启动线程
②调用当前线程的run()–>调用了Runnable类型的target的run()






示例代码(遍历100以内的所有的偶数):

 
  

输出结果(部分):
在这里插入图片描述

方式一和方式二的比较:

  • 开发中优先选择实现Runnable接口的方式
  • 原因:
    (1)实现的方式没有类的单继承性的局限性
    (2)实现的方式更适合来处理多个线程有共享数据的情况

  • 相同点:两种方式都需要重写run(),将线程要执行的逻辑声明在run()中

方式三:实现Callable接口

步骤:
1.创建一个实现Callable的实现类
2.实现call方法,将此线程需要执行的操作声明在call()中
3.创建Callable接口实现类的对象
4.将此Callable接口实现类的对象作为传递到FutureTask构造器中,创建FutureTask的对象
5.将FutureTask的对象作为参数传递到Thread类的构造器中,创建Thread对象,并调用start()
6.获取Callable中call方法的返回值





实现Callable接口的方式创建线程的强大之处

  • call()可以有返回值的
  • call()可以抛出异常,被外面的操作捕获,获取异常的信息
  • Callable是支持泛型的

示例代码1:

 
  

输出结果(尾部):
在这里插入图片描述
示例代码2:

 
  

运行结果:
在这里插入图片描述

方式四:使用线程池

线程池好处:
1.提高响应速度(减少了创建新线程的时间)
2.降低资源消耗(重复利用线程池中线程,不需要每次都创建)
3.便于线程管理


核心参数:

  • corePoolSize:核心池的大小
  • maximumPoolSize:最大线程数
  • keepAliveTime:线程没有任务时最多保持多长时间后会终止

步骤:
1.以方式二或方式三创建好实现了Runnable接口的类或实现Callable的实现类
2.实现run或call方法
3.创建线程池
4.调用线程池的execute方法执行某个线程,参数是之前实现Runnable或Callable接口的对象



示例代码:

 
  

输出结果(部分):
在这里插入图片描述

方式五:使用匿名类

 
  

或者

 
  

                            

版权声明


相关文章:

  • pm2(PM2 命令使用方法总结)2025-07-01 18:01:02
  • java课程设计参考资料2025-07-01 18:01:02
  • jre插件安装2025-07-01 18:01:02
  • jvm satb2025-07-01 18:01:02
  • 免费的dns地址2025-07-01 18:01:02
  • sql数据库基本语法2025-07-01 18:01:02
  • 红黑树的概念2025-07-01 18:01:02
  • java哈希表常用方法2025-07-01 18:01:02
  • redis list命令列表2025-07-01 18:01:02
  • 数据库2025-07-01 18:01:02