上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 37 下一页

2017年3月23日

java多线程16:join()的使用

摘要: 讲解join()方法之前请确保对于即wait()/notify()/notifyAll()机制已熟练掌握。可以参考前面的笔记join()方法的作用是等待线程销毁。join()方法反应的是一个很现实的问题,比如main线程的执行时间是1s,子线程的执行时间是10s,但是主线程依赖子线程执行完的结果,这时怎么办?可以像生产者/消费者模型一样,搞一个缓冲区,子线程执行完把数据放在缓冲区中,通知main线... 阅读全文

posted @ 2017-03-23 18:04 signheart 阅读(709) 评论(1) 推荐(0) 编辑

java多线程14 :wait()和notify()/notifyAll()

摘要: 轮询线程本身是操作系统中独立的个体,但是线程与线程之间不是独立的个体,因为它们彼此之间要相互通信和协作。想像一个场景,A线程做int型变量i的累加操作,B线程等待i到了10000就打印出i,怎么处理?一个办法就是,B线程while(i == 10000),这样两个线程之间就有了通信,B线程不断通过轮训来检测i == 10000这个条件。这样可以实现我们的需求,但是也带来了问题:CPU把资源浪费了B... 阅读全文

posted @ 2017-03-23 18:03 signheart 阅读(308) 评论(0) 推荐(0) 编辑

java 多线程12 : 无锁 实现CAS原子性操作----原子类

摘要: 由于java 多线程11:volatile关键字该文讲道可以使用不带锁的情况也就是无锁使变量变成可见,这里就理解下如何在无锁的情况对线程变量进行CAS原子性及可见性操作我们知道,在并发的环境下,要实现数据的一致性,最简单的方式就是加锁,保证同一时刻只有一个线程可以对数据进行操作。。。。例如一个计数器,我们可以用如下的方式来实现:public class Counter { private v... 阅读全文

posted @ 2017-03-23 18:02 signheart 阅读(1086) 评论(0) 推荐(0) 编辑

java多线程13 : 死锁

摘要: 前言死锁单独写一篇文章是因为这是一个很严重的、必须要引起重视的问题。这不是夸大死锁的风险,尽管锁被持有的时间通常很短,但是作为商业产品的应用程序每天可能要执行数十亿次获取锁->释放锁的操作,只要在这数十亿次操作中只要有一次发生了错误,就可能导致程序中发生死锁,并且即使通过压力测试也不可能找出所有潜在的死锁。 死锁一个经典的多线程问题。当一个线程永远地持有一个锁,并且其他线程都尝试去获得这个锁时,那... 阅读全文

posted @ 2017-03-23 18:02 signheart 阅读(277) 评论(0) 推荐(0) 编辑

java 多线程9 : synchronized锁机制 之 代码块锁

摘要: synchronized同步代码块用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个较长时间的任务,那么B线程必须等待比较长的时间。这种情况下可以尝试使用synchronized同步语句块来解决问题。看一下例子:下面例子是优化后的例子 使用代码块锁,原先例子是方法锁,就是同步 必须要执行2个for public class ThreadDomain18 ... 阅读全文

posted @ 2017-03-23 18:01 signheart 阅读(19190) 评论(1) 推荐(0) 编辑

java 多线程10:synchronized锁机制 之 锁定类静态方法 和锁定类.Class 和 数据String的常量池特性

摘要: 同步静态方法 synchronized还可以应用在静态方法上,如果这么写,则代表的是对当前.java文件对应的Class类加锁。看一下例子,注意一下printC()并不是一个静态方法: publicclass ThreadDomain25 { public synchronized static v 阅读全文

posted @ 2017-03-23 18:01 signheart 阅读(2660) 评论(1) 推荐(0) 编辑

java 多线程11:volatile关键字

摘要: 直接先举一个例子普通的线程实例变量的非可见性:public class MyThread28 extends Thread { private boolean isRunning = true; public boolean isRunning() { return isRunning; } public void setRunning(... 阅读全文

posted @ 2017-03-23 18:01 signheart 阅读(265) 评论(0) 推荐(1) 编辑

java 多线程5: java 终止线程及中断机制 (stop()、interrupt() 、interrupted()、isInterrupted())

摘要: JAVA中有3种方式可以终止正在运行的线程①线程正常退出,即run()方法执行完毕了②使用Thread类中的stop()方法强行终止线程。但stop()方法已经过期了,不推荐使用③使用中断机制interrupt()1.stop()方法stop()在java多线程中已经废弃1.stop()方法会导致释放锁的不良后果,数据不完整比如一个上锁了得方法:threadA线程拥有了监视器,这些监视器负责保护某... 阅读全文

posted @ 2017-03-23 18:00 signheart 阅读(1366) 评论(2) 推荐(0) 编辑

java 多线程6: 中断机制 优雅的终止java线程

摘要: 前文 java 多线程5: java 终止线程及中断机制 (stop()、interrupt() 、interrupted()、isInterrupted())使用 interrupt() 和 interrupted() 判断来终止线程public class Run { public static void main(String[] args) { try { ... 阅读全文

posted @ 2017-03-23 18:00 signheart 阅读(449) 评论(0) 推荐(0) 编辑

java 多线程7: (suspend方法与resume方法) 挂起与恢复

摘要: suspend方法与resume 是 实例方法,已废弃缺点一:会造成独占,从而造成死锁缺点二:会造成数据不同步,不能保证数据原子性 阅读全文

posted @ 2017-03-23 18:00 signheart 阅读(1458) 评论(0) 推荐(0) 编辑

上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 37 下一页

导航