多线程_02_实现线程的方式
来源:互联网 发布:批量删除hbase中的数据 编辑:程序博客网 时间:2024/06/06 00:14
创建线程有三种方式:Thread,Runnable,Callable
1、java.lang.Thread类
Thread thread=new Thread(){@Overridepublic void run(){while (true) {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("1"+Thread.currentThread().getName());System.out.println("2:"+this.getName());}}};thread.start();
2、Runnable接口
Thread thread2=new Thread(new Runnable() {@Overridepublic void run() {while (true) {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("1"+Thread.currentThread().getName());}}});thread2.start();runnable对象不是线程,而是线程所要运行代码的宿主。
注意:为什么我们为什么创建一个线程时需要先执行start()在执行run(),而不是直接调用run()方法?
因为run()方法也只是Thread的普通的一个方法,如果直接调用它的话,这不是一个线程,只是普通的方法调用。Thread.start()方法(native)启动线程,进入就绪状态,当cpu分配给该线程时间时,由JVM自动调用执行run()方法。
实际上,我们经常用的是runnable()接口实现的方法,原因如下:
1、如果你打算多重继承时,选用runnable(),因为一个类不能同时有两个父类,避免了单继承的限制
2、适合多个相同程序代码的线程处理同一个资源,把虚拟cpu(线程)同程序代码,数据有效分离,体现了面向对象的思想
3、有利于程序的健壮性,代码能够被多个线程共享,代码与数据独立。
注意:如果Thread类的run方法没有被覆盖,并且为该Thread对象设置了一个Runnable对象,该run方法会调用runnable对象的run方法。
3、Callable和Future
1、Callable规定的方法是call(),Runnable规定的方法是run()
2、Callable的任务执行后可返回值,而Runnable的任务是不能返回值得。
3、call方法可以抛出异常,run方法不可以
Future取得的结果类型和Callable返回的结果类型必须一致,通过泛型实现
Callable要采用ExecutorService的submit方法提交,返回的future对象可以取消任务。
CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable任务对应的futrue对象。
- 多线程_02_实现线程的方式
- ExecutorService来进行线程池的方式实现多线程
- 【Java多线程】实现java线程的两种方式
- JAVA单线程以及java多线程的实现方式
- JAVA多线程之——线程的实现方式
- Java多线程:创建线程的两种实现方式
- 线程池(实现多线程的第三种方式)
- 线程(三)——多线程的实现方式
- 多线程-多线程方式3的思路及代码实现:方式3依赖于线程池存在的
- 线程概念,状态及状态之间的关系,实现多线程方法,实现同步线程的方式
- 多线程的实现方式
- 多线程的实现方式
- 多线程的实现方式
- 多线程的实现方式
- Java多线程线程安全实现方式
- 多线程-线程同步有几种实现方式
- JAVA多线程系列--线程实现方式
- 【我的Java笔记】多线程_多线程实现的第三种方式(线程池)
- Ubuntu14.04 LTS下破解myeclipse2015
- Wireshark入门与进阶系列四之过滤语法
- 设计莫原则和模式
- Struts2 return JSON data and convert the date field
- hdu4322 Candy 最小费用最大流
- 多线程_02_实现线程的方式
- 七月英语总结
- ZigBee网络离开机制
- 30套JSP网站源代码合集
- 观"张学锋相声考研"后所感
- JDBC-Ststement/PreparedStatemnent/CallableStatement
- 【CSDN】怎样在CSDN博客开头插入目录
- 剑指offer——矩形覆盖问题
- Lucene学习笔记之(四)特定项进行搜索