同步块: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 对象内存中堆的存储【类型对象指针、同步块索引】
		
最近在看书,看到了对象在内存中的存储方式. 讲到了对象存储在内存堆中,分配的空间除了类型对象的成员所需的内存量,还有额外的成员(类型对象指针. 同步块索引 ),看到这个我就有点不懂了,不知道类型对象指 ...
 
随机推荐
- POJ 1099 Square Ice 连蒙带猜+根据样例找规律
			
目录 题面 思路 思路 AC代码 题面 Square Ice Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4526 A ...
 - vue踩坑:vue+ element ui 表单验证有值但验证失败。
			
一.如图:有值但是验证失败 二. <el-form :model="form" :rules="rules"> <el-form-item l ...
 - Java如何自定义注解
			
本文主要是记录所学,以供后续参考.注解是Java 1.5引入的,Java自定义注解是通过运行时靠反射获取注解,注解相当于是一种嵌入在程序中的元数据,可以使用注解解析工具或编译器对其进行解析,也可以指定 ...
 - AspxDashboardView 更新参数
			
AspxDashboardView 更新参数 function SetThrendDashboardView() { console.log("就是这样被你征服"); var to ...
 - (转) maven snapshot和release版本的区别
			
在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一 天要发布N次.我们知道,maven的依赖管理是基于版本管理的 ...
 - js替换从excel复制的文本的换行
			
var newStr=oldStr.replace(/\n/g,','); 该代码即可将文本中的换行替换为, oldStr为从excel复制过来的值 newStr为替换后的值
 - 添加右键新增.md文件
			
Windows下设置.md文件右键可新建 应用场景:Windows10, Typora(Markdown编辑器) 因为习惯用Markdown来写文档, 所以常常需要新建.md文档,但由于Windows ...
 - hzq84621巨佬的语录
			
摘自诸中培训讲图论时: 1.光图论考不出什么东西,一般作为DP的附庸出现. 2.如果不是骗骗不承认SPFA的外国人,一般能用dij就用dij. 3.那个东西(指bellman-ford)除了判负环没什 ...
 - webpack 之搭建本地服务器
			
搭建本地服务器 webpack提供了一个可选的本地开发服务器,这个本地服务器基于node.js搭建,内部使用express框架,可以实现 我们想要的让浏览器自动刷新显示我们修改后的结果 不过它是一个单 ...
 - C语言运算符的优先级与结合性
			
结合性:左结合是从左到右依次执行,右结合是从右到左依次执行. 优先级 运算符 名称或作用 运算类型 结合方向 特点 1 () [] -> . 小括号运算符 下标运算符 指向结构成员运算符 结构成 ...