成功的路上总是离不开贵人的帮助,名师的指点和小人的刺激。

莫怕,过了桥,就翻篇了

2017年12月9日 #

2.3.7synchronized代码块有volatile同步的功能

摘要: 关键字synchronized可以使多个线程访问同一个资源具有同步性,而且他还具有将线程工作内存中的私有变量与公共内存中的变量同步的功能。 以-server服务器模式运行得到死循环 得到上面结果的原因是各个线程间的数据值没有可视性造成的。而关键字synchronized具有可视性。 更改Servic 阅读全文

posted @ 2017-12-09 21:12 痞子陈2016 阅读(475) 评论(0) 推荐(0) 编辑

2.3.6原子类也并不完全安全

摘要: 原子类在具有逻辑的情况下输出结果也具有随机性 结果分析: 打印顺序出错了,应该每次加100在加一次1,出现这样的情况原因是addAndGet()方法是原子的,但方法和方法直接的调用却不是原子的 解决方案同步 阅读全文

posted @ 2017-12-09 20:58 痞子陈2016 阅读(266) 评论(0) 推荐(0) 编辑

2.3.5使用原子类进行i++操作

摘要: 除了在i++操作时使用synchronized关键字实现同步外,还可以使用AtomicInteger原子类进行实现 原子操作时不可分割的整体,没有其他线程能够中断或检查正在原子操作的变量,一个原子类型就是一个原子操作的可用类型,他可以在没有锁的情况下,做到线程安全 程序运行结果累加到了50000 阅读全文

posted @ 2017-12-09 20:46 痞子陈2016 阅读(308) 评论(0) 推荐(0) 编辑

2.3.4volatile的原子性

摘要: 关键字volatile虽然增加了实例变量在多个线程之间的可见性,但它却不具备同步性,那么也不具备原子性。 测试 结果:线程异步 更改加上关键字synchronized 在本例中,如果在方法private static void addCount()前加入synchronized同步关键字,也就没有必 阅读全文

posted @ 2017-12-09 20:40 痞子陈2016 阅读(239) 评论(0) 推荐(0) 编辑

2.3.3解决异步死循环

摘要: 测试 程序处于死循环,为何呢?代码线程被停止了从未被执行。 原因: 在启动RunThread.java线程时,变量private boolean isRunning=true;存在于公共堆栈及线程的私有堆栈中,在JVM被设置为-server模式时为了线程 运行的效率,线程一直在私有堆栈中取得isRu 阅读全文

posted @ 2017-12-09 18:10 痞子陈2016 阅读(485) 评论(0) 推荐(0) 编辑

2.3.2解决同步死循环

摘要: 测试如下 但当上面的例子代码的格式运行在-server服务器的模式中64bit的JVM上时,会出现死循环 解决的方案时使用volatile关键字 关键字volatile的作用是强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值 阅读全文

posted @ 2017-12-09 17:05 痞子陈2016 阅读(241) 评论(0) 推荐(0) 编辑

2.3.1关键字volatile与死循环

摘要: 关键字volatile的主要作用是使变量在多个线程间可见。 测试如下 程序开始运行后 根本没停下来。原因是main线程一直处理while()循环,导致程序不能执行下面的代码。解决办法肯定是用多线程技术 阅读全文

posted @ 2017-12-09 16:55 痞子陈2016 阅读(508) 评论(0) 推荐(0) 编辑

2.2.16锁对象的改变

摘要: 在将任何数据类型作为同步锁时,需要注意的是,是否有多个线程同时持有锁对象,如果同时持有相同的锁对象,则这些线程之间就是同步的,如果分别获得锁对象,这些线程之间是异步的。 结果分析: 因为50毫秒过后线程B 获得的锁是456 继续测试: 去掉代码Thread.sleep(50) 线程A和B持有的锁都是 阅读全文

posted @ 2017-12-09 15:34 痞子陈2016 阅读(196) 评论(0) 推荐(0) 编辑

2.2.15内置类与同步:测试2

摘要: 本实验测试同步代码块synchronized(class2)对class2上锁后,其他线程只能以同步的方式调用class2中的静态同步方法 结果分析 InnerClass1中method1和InnerClass2method1的锁对象是同一个,而InnerClass1中的method2的锁对象是In 阅读全文

posted @ 2017-12-09 15:08 痞子陈2016 阅读(185) 评论(0) 推荐(0) 编辑

2.2.14内置类与同步:测试1

摘要: 本实验测试是在内置类中有两个同步方法,但使用的却是不同的锁,打印结果也是异步的 由于持有不同的对象监视器,所以打印结果就是乱序的。 阅读全文

posted @ 2017-12-09 14:53 痞子陈2016 阅读(153) 评论(0) 推荐(0) 编辑

2.2.13内置类与静态内置类

摘要: 关键字synchronized的知识点还涉及内置类的使用。 内置类还有一种叫做静态内置类 阅读全文

posted @ 2017-12-09 14:43 痞子陈2016 阅读(242) 评论(0) 推荐(0) 编辑

2.2.12多线程的死锁

摘要: java线程死锁是一个经典的多线程问题,因为不同的线程都在等待根本不可能释放的锁,从而导致所有的任务无法继续完成,在多线程技术中,死锁是必须避免的,因为会造成线程的假死。 程序运行结果如上。 可以用jdk自带的工具来监测是否有死锁现象 监测出现死锁 死锁是程序设计的bug,在程序设计时就要避免双方互 阅读全文

posted @ 2017-12-09 13:56 痞子陈2016 阅读(166) 评论(0) 推荐(0) 编辑

2.2.11同步synchronized方法无限等待与解决

摘要: 同步方法容易造成死循环。 结果运行: 线程B永远得不到运行的机会,锁死了。 这时可以使用同步代码块来解决这样的问题 更改Service.java文件代码 运行结果不再出现同步等待的情况。 阅读全文

posted @ 2017-12-09 13:33 痞子陈2016 阅读(567) 评论(0) 推荐(0) 编辑

导航