搜索
搜 索
本版
文章
帖子
用户
图文精华
hadoop-2.6.0+zookeeper-3.4.6+hbase-1.0.0+hive-1.1.0完全分布 ...
首页
Portal
专题
BBS
面试
更多
登录
注册
用户组:游客
主题
帖子
云币
我的帖子
我的收藏
我的好友
我的勋章
设置
退出
导读
淘贴
博客
群组
社区VIP
APP下载
今日排行
本周排行
本周热帖
本月排行
本月热帖
会员排行
About云-梭伦科技
»
专题
›
技术学习(版主发帖区)
›
编程语言
›
Java语言
›
java线程和线程池
0
0
0
分享
java线程和线程池
liuyuze_hanbing
发表于 2017-9-27 11:33:43
[显示全部楼层]
阅读模式
关闭右栏
0
6252
一、Thread介绍
线程从创建到最终的消亡,要经历若干个状态。一般来说,线程包括以下这几个状态:创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、time waiting(睡眠或等待一定的事件)、waiting(等待被唤醒)、消亡(dead)。
join() 等待至线程执行结束
sleep() 线程主动睡眠,不会释放锁
wait() 线程休眠,释放锁
yield()线程交出cpu使用权,不会占用一个完成的cpu执行周期
interrupt()发送终止标记
isInterrupted() 判断线程是否有终止标记
Thread.interrupted() 判断是否存在终止
标记
同时清除终止标记
1.除非当前线程正在中断自身,这是始终允许的,所以调用此线程的checkAccess方法,这可能会导致抛出SecurityException异常。
2.
如果在调用wait(),wait(long)或wait(long,int)对象类或join(),join(long),join(long,int)的方法中阻塞此线程, ,sleep(long)或sleep(long,int),这个类的方法,那么它的中断状态将被清除,它会收到一个InterruptedException。
3.
如果此线程在InterruptibleChannel上的I / O操作中被阻塞,则通道将被关闭,线程的中断状态将被设置,线程将接收到java.nio.channels.ClosedByInterruptException。
4.
如果此线程在java.nio.channels.Selector中被阻止,那么线程的中断状态将被设置,并且它将从选择操作立即返回,可能具有非零值,就好像选择器的唤醒方法被调用一样。
5.如果线程正在执行,只是收到终止信号,如果要终止正在执行的线程,可以通过判断
isInterrupted()来手动终止线程,一般不这么用。使用一个isStop状态量来控制
二、创建线程Thread
1、无返回值
new Thread() {
@Override
public void run() {
}
}.start();
new Thread(new Runnable(){
@Override
public void run() {
}
}).start();
2、有返回值
Callable<String> mycallable = new Callable<String>() {
@Override
public String call() throws Exception {
return null;
}
};
FutureTask<String> futureTask = new FutureTask<String>(mycallable) {
@Override
protected void done() {
// 执行结束时调用该方法
super.done();
}
};
new Thread(futureTask).start();
三、Future
public interface Future<V>
public class FutureTask<V> implements RunnableFuture<V>
protected void done(),当任务结束时,该回调函数会被触发,必要时重写该方法
public boolean cancel(mayInterruptIfRunning) 尝试取消任务
1. 如果任务已经完成、已经被取消、由于某种其他原因而无法取消,则此尝试将失败。
2.如果任务尚未启动并且尝试取消成功,则此任务不在被执行。
3.如果任务正在运行,mayInterruptIfRunning参数确定是否调用thread.interrupt();
四、ExecutorService 使用
ExecutorService executorService1 = Executors.newSingleThreadExecutor(); //单个线程的线程池
Executors$FinalizableDelegatedExecutorService 内部还是ThreadPoolExecutor
ExecutorService executorService2 = Executors.newFixedThreadPool(10); //固定大小的线程池
ThreadPoolExecutor
ExecutorService executorService3 = Executors.newScheduledThreadPool(10); //定时执行的线程池
ScheduledThreadPoolExecutor
ExecutorService executorService4 = Executors.newCachedThreadPool(); //可变大小的线程池
ThreadPoolExecutor //最小0 最大Integer.MAX
ExecutorService executorService4 = Executors.newWorkStealingPool(); // ForkJoinPool 分叉合并
执行
execute(Runnable) //无返回
submit(Runnable) //返回Future
submit(Callable<T>) //有返回Future<T>
invokeAny(...) 阻塞,返回结果T,其中一个执行结束就返回
invokeAll(...)有返回List<Future<T>>
关闭shutdown();
阻止新来的任务提交,对已经提交了的任务不会产生任何影响。当已经提交的任务执行完后,它会将那些闲置的线程(idleWorks)进行中断,这个过程是异步的。无返回
shutdownNow()除了努力尝试停止处理积极执行任务之外,没有任何保证。 例如,典型的实现将通过Thread.interrupt取消,所以任何不能响应中断的任务可能永远不会终止。返回任务列表
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
没找到任何评论,期待你打破沉寂
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
发表新帖
liuyuze_hanbing
注册会员
关注
4
主题
7
帖子
3
粉丝
TA的主题
spark消费kafka数据手动维护offset
2018-1-12
相关系数计算
2017-12-4
jvm内存模型
2017-9-27
java线程和线程池
2017-9-27
24小时热文
像高手一样发言:七种常见工作场景的说话之
幕后产品:打造突破式产品思维
副业警钟,新型法律碰瓷发财方式:批量诉讼
Spark机器学习
Spark机器学习算法、源码及实战详解
关闭
推荐
/2
中文版ChatGPT
1.无需魔法 2.提高编程效率 3.提高文档能力
查看 »
新手帮助
新手帮助:注册遇到问题,领取资源,加入铁粉群,不会使用搜索,如何获取积分等
查看 »
意见
反馈