zoukankan      html  css  js  c++  java
  • 同步块:synchronized(同步监视器对象){同步运行代码片段}

    package seday10;

    import seday03.Test2;

    /**
    * @author xingsir
    * 同步块:synchronized(同步监视器对象){需要同步运行的代码片段}
    * 同步块可以更准确的控制需要同步运行的代码片段,有效的缩小同步范围可以保证并发安全的前提下尽可能的提高并发 的效率。
    */
    public class syncDemo2 {

    public static void main(String[] args) {
    Eat eat =new Eat();//实例化一个对象eat
    Thread t1=new Thread() {//创建线程一
    public void run() {
    eat.order();//调用
    }
    };
    Thread t2=new Thread() {//创建线程二一
    public void run() {
    eat.order();//调用
    }
    };
    t1.start();//线程调用
    t2.start();//线程调用
    }
    }


    /*
    * 若不使用,synchronized (this) {},结果如下:
    Thread-1:开始浏览菜单。。。。。
    Thread-0:开始浏览菜单。。。。。
    Thread-1:服务员点餐...
    Thread-0:服务员点餐...
    Thread-1:上菜开吃!
    Thread-0:上菜开吃!
    假设就一个服务员的话,就存在问题
    */


    /*使用,synchronized (this) {}。执行结果:可以看出线程Thread-1处理完后Thread-0才开始处理
    Thread-1:开始浏览菜单。。。。。
    Thread-0:开始浏览菜单。。。。。
    Thread-1:服务员点餐...
    Thread-1:上菜开吃!
    Thread-0:服务员点餐...
    Thread-0:上菜开吃!

    */


    class Eat{
    public void order() {
    Thread thread=Thread.currentThread();//主进程
    try {
    System.out.println(thread.getName()+":开始浏览菜单。。。。。");
    Thread.sleep(5000);//阻塞5000毫秒
    //服务员就一个点餐需要排队,所以
    synchronized (this) {//this为同步监视器对象,所以需要同步运行的代码片段
    System.out.println(thread.getName()+":服务员点餐...");//打印出线程名字
    Thread.sleep(5000);//阻塞5000毫秒
    }
    System.out.println(thread.getName()+":上菜开吃!");//打印出线程名字
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    }

  • 相关阅读:
    获取 鼠标 键盘 最后响应信息
    EF 6 for mysql
    Python中的OS模块。
    python中的随机函数random的用法示例random
    Python中OSI七层模型
    Pythoon中的面向对象三大特征
    Python中的函数(学习日记)
    Python的6种运算符(日记)
    计算机的发展史
    osi七层
  • 原文地址:https://www.cnblogs.com/xingsir/p/12083652.html
Copyright © 2011-2022 走看看