同步块: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();
}
}
}
同步块:synchronized(同步监视器对象){同步运行代码片段}的更多相关文章
- java多线程——同步块synchronized详解
Java 同步块(synchronized block)用来标记方法或者代码块是同步的.Java同步块用来避免竞争.本文介绍以下内容: Java同步关键字(synchronzied) 实例方法同步 静 ...
- 多线程--同步--方法块和同步块synchronized
package com.sxt.syn; /** * 线程安全: 在并发时保证数据的正确性.效率尽可能高 * synchronized * 1.同步方法 * 2.同步块 * * */ public c ...
- Java线程同步:synchronized锁住的是代码还是对象
所以我们在用synchronized关键字的时候,能缩小代码段的范围就尽量缩小,能在代码段上加同步就不要再整个方法上加同步.这叫减小锁的粒度,使代码更大程度的并发.原因是基于以上的思想,锁的代码段太长 ...
- From 表单序列化为json对象(代码片段)
$.fn.serializeJson=function(){ var serializeObj={}; var array=this.serializeArray(); $(array).each(f ...
- synchronized同步块和volatile同步变量
Java语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量.这两种机制的提出都是为了实现代码线程的安全性.其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而 ...
- Java同步块(synchronized block)使用详解
Java 同步块(synchronized block)用来标记方法或者代码块是同步的.Java同步块用来避免竞争.本文介绍以下内容: Java同步关键字(synchronzied) 实例方法同步 静 ...
- 线程的同步机制:同步代码块&同步方法
解决存在的线程安全问题:打印车票时出现重票,错票 使用同步代码块的解决方案 TestWindow2 package com.aff.thread; /* 使用实现Runnable接口的方式,售票 存在 ...
- [C#学习笔记]类型对象指针和同步块索引
写在前面 看<CLR via C#>第四章时,看到了类型对象指针和同步块索引这两个概念,不知如何解释,查看过相关资料之后,在此记录. 类型对象指针 <CLR via C#>中的 ...
- C# CLR via 对象内存中堆的存储【类型对象指针、同步块索引】
最近在看书,看到了对象在内存中的存储方式. 讲到了对象存储在内存堆中,分配的空间除了类型对象的成员所需的内存量,还有额外的成员(类型对象指针. 同步块索引 ),看到这个我就有点不懂了,不知道类型对象指 ...
随机推荐
- 直观获取redis cluster 主从关系
需求:还是redis-trib.rb脚本获取的信息不足或者太繁杂,这里给出更加直观的一种方法, 说明:已在4.x版本测试通过,3.x不可用. 原生的输出 (1adfa7f3...) keys slot ...
- int long的数据范围
java 整数型 byte 1字节 -128~127 -2^7~2^7-1 short 2字节 -32768~32767 int 4个字节 -2147483648~2147483647 -2 ...
- tk(三)按钮的事件绑定
(三)按钮的事件绑定 ==1.普通的Button绑定事件== (1)说明: Button 使用 command=功能函数 来绑定 Button(win, text="确定", co ...
- django Warning: (3135, "'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes
django连接数据库配置设置如下 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test2', ...
- Docker镜像加速-配置阿里云镜像仓库
Docker默认远程仓库是https://hub.docker.com/ 比如我们下载一个大点的东西,龟速 由于是国外主机,类似Maven仓库,慢得一腿,经常延迟,破损: 所以我们一般都是配置国内镜像 ...
- idea修改忽视文件产生得bug
为了提交代码方便,在idea中增加了忽视文件选项. 这一修改可把自己坑惨了,更改代码运行代码得时候,连打印都没出来,对照了半天代码 也没发现是哪里得错误,后来想到某次修改代码后class文件并没改变, ...
- MySQL启动和停止
MySQL视为大仓库,关闭的时候有权限有身份都无法进入使用的时候要保持启用状态 方式一: 计算机游击找到“管理”打开 左侧栏目中找到“服务和应用程序”打开 打开服务 找到MySQL...,右击.... ...
- gap间隙锁
1.什么式gap锁 (1)在索引记录之间,或者在索引之前,或者索引之后的区间上加锁,就是gap锁.比如: SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR ...
- 如何在Word中排出漂亮的代码,去除回车符,去除拼写检查
这位博主写到很到位,这里补充一下在VBA里用模块的部分. https://blog.csdn.net/code4101/article/details/41802715 1.放代码的方式是贴纯文本. ...
- 题解【洛谷P5788】【模板】单调栈
题面 单调栈模板题. 单调栈与单调队列一样,都是维护了一段区间内的顺序. 然后--这个题用一个栈维护一下贪心就没了. 具体参考这一篇题解 #include <bits/stdc++.h> ...