多线程
多线程
dancheng_work
在时间允许的情况下,源码是最好的开发文档。
展开
-
多线程一:创建线程的方式
1. 继承Thread类,重写run方法2. 实现Runnable接口,必须完成run函数使用方式:MyThreadImp 为实现的Runable类MyThreadImp myThreadImp = new MyThreadImp();Thread thread = new Thread(myThreadImp);...原创 2018-07-10 13:53:03 · 132 阅读 · 0 评论 -
多线程二:停止线程方法
1.异常法:在想停止的地方,抛出个throw new InterruptedException();异常,出现异常锁自动释放。 2.在沉睡中停止:如果一个线程处于sleep状态时执行了interrupt方法后(即线程停止了)会出现异常停止 3.暴力停止:使用stop()方法直接就可以停止线程了,使用stop()方法释放锁会给数据造成不一致性的结果,这样可能会出现程序处理的数据遭到破坏,最终导致程序...原创 2018-07-10 13:53:54 · 175 阅读 · 0 评论 -
多线程三:脏读概念
在读取实例变量时,此值已经被其他线程更改过了,脏读一定会出现操作实例变量的情况下,这就是不同线程“争抢”实例变量的结果。原创 2018-07-10 13:54:39 · 453 阅读 · 0 评论 -
多线程四:可重入锁
自己可以再次获取自己的内部锁。比如有1调线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁的时候还是可以获取的,如果不可锁重入的话,就会造成死锁。可重入锁也支持在父类继承的环境中。(即子类锁中调用了父类带锁函数) 普通可重入锁示例代码:public class Service { synchronized public void service1() { Syst...原创 2018-07-10 13:57:48 · 308 阅读 · 0 评论 -
多线程五:synchronized同步代码块
使用synchronized的弊端A线程调用同步方法执行一个长时间的任务,那么B线程则必须等待比较长时间。synchronized同步代码块两个并发线程访问同一个对象object中synchronized(this)同步代码块时,一段时间内只能有一个线程被执行,另一个线程必须等待当前线程执行完这个代码以后才能执行该代码块。当一个线程访问object的一个synchronized同步代码块时,另一个...原创 2018-07-10 14:00:03 · 327 阅读 · 0 评论 -
多线程六:死锁例子与排查
死锁产生情况:双方互相持有对方的锁的情况死锁示例代码:public class DealThread implements Runnable { public String username; public Object lock1 = new Object(); public Object lock2 = new Object(); public void setFlag(String ...原创 2018-07-10 14:02:54 · 365 阅读 · 0 评论 -
多线程七:关键字synchronized和volatile比较
volatile关键字 关键字volatile主要使用的场合是在多个线程中可以感知实例变量被更改了,并且可以获得最新的值使用,也就是用多线程读取共享变量时可以获得最新值使用。 关键字volatile提示线程每次从共享内存中读取变量,而不是从私有内存中读取,这样就保证了同步数据的可见性。 关键字volatile的主要作用是使变量在多个线程间可见 关键字volatile的作用是强制从公共堆栈中...原创 2018-07-10 14:04:27 · 224 阅读 · 0 评论 -
多线程八:一个线程连着调用start两次或多次会出现什么情况,为什么会出现IllegalThreadStateException异常
在说明之前大家先看一下start()方法的源码public synchronized void start() { if (threadStatus != 0) throw new IllegalThreadStateException(); group.add(this); boolean started = fals...原创 2018-08-04 10:12:45 · 4037 阅读 · 0 评论