JAVA多线程--Thinking in java
聊聊并发:http://ifeve.com/java-concurrency-thread-directory/
阻塞状态:
sleep 可中断利用 interrupt方法
wait
IO 不可中断 I:关闭底层资源 II:new I O
任务试图在某个对象上调用其同步控制方法,但是对象锁被另一个任务获取 syn不可中断 lock.lockInterruptibly() 可以中断
Executor.shutdownNow() 发送一个interrupt() 调用给它启动的所有线程
如何中断单一任务?
Executor.submit()启动单一任务 该方法返回一个Futrue<?> 类型的参数
利用这个参数的cancel(true)即相当于在该线程上调用interrupt()
public static void main(String[]args){
final Test st = new Test();
new Thread(){
@Override
public void run(){
st.f1(100);
}
}.start();
System.out.println("main is over");
}
}
刚才写测试用例 突然发现自己对有些概念不是特别明确 比如上面的例子
我原以为 main线程输出完那句话 整个程序就结束了 其实并非这样
只有当把副线程设置为守护线程的时候 才是我想象的那样
如果在线程上调用interrupt方法停止某个任务 那么在run循环碰巧没有产生任何阻塞的情况下 任务无法中断
1可以调用interrupted检查中断状态 while(!Thread.interrupted())
wait方法
I带毫秒数,在wait期间对象锁是释放的 可以通过notify notifyall释放 或者时间到期 从wait中恢复
II不带参数 wait无限期等待下去
调用wait notify notifyall 的方法必须在同步控制方法或者同步控制块里
死锁的四个条件:
1互斥条件。任务使用的资源至少有一个是不能共享的
2至少有一个任务它必须持有一个资源且正在等待获取一个当前被别的任务持有的资源。
3资源不能被任务抢占
4必须有循环等待
JAVA多线程--Thinking in java的更多相关文章
- Java多线程编程核心技术---Java多线程技能
基本概念 进程是操作系统结构的基础,是一次程序的执行,是一个程序及其数据结构在处理机上顺序执行时所发生的活动,是程序在一个数据集合上运行的过程,是系统进行资源分配和调度的独立单位.线程可以理解成是在进 ...
- 【java多线程系列】java内存模型与指令重排序
在多线程编程中,需要处理两个最核心的问题,线程之间如何通信及线程之间如何同步,线程之间通信指的是线程之间通过何种机制交换信息,同步指的是如何控制不同线程之间操作发生的相对顺序.很多读者可能会说这还不简 ...
- java 多线程5: java 终止线程及中断机制 (stop()、interrupt() 、interrupted()、isInterrupted())
JAVA中有3种方式可以终止正在运行的线程 ①线程正常退出,即run()方法执行完毕了 ②使用Thread类中的stop()方法强行终止线程.但stop()方法已经过期了,不推荐使用 ③使用中断机制i ...
- java多线程基础(二)--java多线程的基本使用
java多线程的基本使用 在java中使用多线程,是通过继承Thread这个类或者实现Runnable这个接口或者实现Callable接口来完成多线程的. 下面是很简单的例子代码: package c ...
- (1)Java多线程编程核心——Java多线程技能
1.为什么要使用多线程?多线程的优点? 提高CPU的利用率 2.什么是多线程? 3.Java实现多线程编程的两种方式? a.继承Thread类 public class MyThread01 exte ...
- Java多线程编程(1)--Java中的线程
一.程序.进程和线程 程序是一组指令的有序集合,也可以将其通俗地理解为若干行代码.它本身没有任何运行的含义,它只是一个静态的实体,它可能只是一个单纯的文本文件,也有可能是经过编译之后生成的可执行文 ...
- Java多线程系列一——Java实现线程方法
Java实现线程的两种方法 继承Thread类 实现Runnable接口 它们之间的区别如下: 1)Java的类为单继承,但可以实现多个接口,因此Runnable可能在某些场景比Thread更适用2) ...
- (原创)Java多线程作业题报java.lang.IllegalMonitorStateException解决
作业: 有一个水池,水池容量500L,一边为进水口,一边为出水口,要求进水放水不能同时进行,水池一旦满了不能继续注水,一旦空了,不能继续放水,进水速度5L/s,放水速度2L/s. 这是我学多线程时做的 ...
- 【java多线程系列】java中的volatile的内存语义
在java的多线程编程中,synchronized和volatile都扮演着重要的 角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的可见性,可见性指的是当一 ...
- java多线程的基础-java内存模型(JMM)
在并发编程中,需要处理两个关键问题:线程之间如何通信,以及线程之间如何同步.通信是指线程之间如何交换信息,在命令式编程中,线程之间的通信机制有两种:内存共享和消息传递. 同步是指程序中用于控 ...
随机推荐
- Java基础---其他对象
第一讲 System类 一.概述 1.System是描述系统一些信息的类,类中的属性和方法都是静态的.不能被实例化,没有提供构造函数. 2.字段摘要 out:标准输出流.默认是控制台. in: ...
- SoapUI中读取法文字符
最近测试中,使用SoapUI时需要读取excel中的法文数据作为参数,groovy script中使用的是jxl进行excel的读取, 开始时一直显示乱码,而后在script中添加如下wookbook ...
- Groovy读取文件信息
1. eachLine -- 打开和读取文件的每一行 new File("foo.txt").eachLine { println it.toUpperCase(); } 2. r ...
- 正则表达式过滤HTML、JS、CSS
功能用途 主要是用来提取html页面内容时使用. 示例代码 using System; using System.Collections.Generic; using System.Linq; usi ...
- Southwestern Europe Regional Contest 2014 题解
时间:2017/9/8 题目8/10 Rank 5/150 体会:三星的题目和国内区域赛差距大,大多数题读懂题意就能做,所以静心读题是关键,套路性太深. A: 题意:给出一个算式,算式中的数字用大写字 ...
- ActiveMQ持久化消息的三种方式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt362 本文只介绍三种方式,分别是持久化为文件,MYSql,Oracle.下面 ...
- Project 7:自然数的拆分
自然数的拆分:任何一个大于1的自然数N,总可以拆分成若干个自然数之和,并且有多种拆分方法.例如自然数5,可以有如下一些拆分方法: 5=1+1+1+1+1 5=1+1+1+2 5=1+2+2 5=1+4 ...
- Java中死锁的简单例子及其避免
死锁:当一个线程永远地持有一个锁,并且其他线程都尝试获得这个锁时,那么它们将永远被阻塞.比如,线程1已经持有了A锁并想要获得B锁的同时,线程2持有B锁并尝试获取A锁,那么这两个线程将永远地等待下去. ...
- 团队作业10——beta阶段项目复审
小组的名字和链接 优点 缺点(bug报告) 最终名次 拖鞋大队 基本功能都实现了,符合用户的需求:每次都能按时完成博客,满足题目要求,所以作业完成的也比较优秀.较alpha版本新增了查重自定义的功能, ...
- java继承中的初始化顺序
初始化顺序:父类的静态变量-->父类的静态代码块-->子类的静态变量-->子类的静态代码快-->父类的非静态变量(父类的非静态代码块)-->父类的构造函数-->子类 ...