ThreadITeye - AG环亚娱乐集团

ThreadITeye

2019年04月02日13时10分15秒 | 作者: 晨朗 | 标签: 先后,正常,作业 | 浏览: 1936

java 线程经过目标的Wait和Notify进行同步,可是存在必定的危险性

其重点是:wait 和 notify 的 时刻点

举例:

package com.horizon.thread.aqs;
public class NotSafeWaitNotify {
 private static StringBuffer lock = new StringBuffer();
 public static void main(String[] args) throws Exception {
 // testWaitAfterNotify();
 //testWaitBeforeNotify();
 testWaitAfterNotifyV2();
 * 先notify 后wait,不能正常作业
 private static void testWaitAfterNotify() throws Exception {
 Thread modifyThread = new Thread() {
 @Override
 public void run() {
 try {
 Thread.sleep(1000);
 } catch (InterruptedException e) {
 e.printStackTrace();
 synchronized (lock) {
 lock.append("1000");
 lock.notify();
 modifyThread.start();
 Thread.sleep(2000);
 synchronized (lock) {
 lock.wait();
 System.out.println(lock);
 * 先notify 后wait,不能正常作业 
 * 改善思路:先判别是否已经有成果
 private static void testWaitAfterNotifyV2() throws Exception {
 Thread modifyThread = new Thread() {
 @Override
 public void run() {
 try {
 Thread.sleep(1000);
 } catch (InterruptedException e) {
 e.printStackTrace();
 synchronized (lock) {
 lock.append("1000");
 lock.notify();
 modifyThread.start();
 Thread.sleep(2000);
 synchronized (lock) {
 //先判别是否已经有成果
 if (lock.length() 0) {
 lock.wait();
 System.out.println(lock);
 * 先wait 后notify,正常作业
 private static void testWaitBeforeNotify() throws Exception {
 Thread modifyThread = new Thread() {
 @Override
 public void run() {
 try {
 Thread.sleep(1000);
 } catch (InterruptedException e) {
 e.printStackTrace();
 synchronized (lock) {
 lock.append("1000");
 lock.notify();
 modifyThread.start();
 synchronized (lock) {
 lock.wait();
 System.out.println(lock);

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    ThreadITeye

    先后,正常,作业
  • 2
  • 3

    vba upgradeITeye

    文件,程序,晋级
  • 4

    java 多线程ITeye

    线程,作业,内存
  • 5
  • 6

    ClassLoaderITeye

    运用,文件,办法
  • 7
  • 8

    手机号码校验合法性ITeye

    代表,必定,第二位
  • 9
  • 10

    Java 目标巨细的核算ITeye

    目标,巨细,字节