Java中同步
解决资源共享的同步操作,有两种方法:一是同步代码块,二是同步方法。
在需要同步的代码块加上synchronized关键字,

同步代码块时必须指定一个需要同步的对象,但一般都是将当前对象(this)设置成同步对象。
class Thread8 implements Runnable{
private int ticket = 5;
public void run(){
for(int i=0; i<100; i++){
synchronized (this) {
if(ticket>0){
try {
Thread.sleep(300);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println("买票: ticket = "+ticket--);
}
}
}
}
}
public class SyncDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread8 tt = new Thread8();
Thread t1 = new Thread(tt);
Thread t2 = new Thread(tt);
Thread t3 = new Thread(tt);
t1.start();
t2.start();
t3.start();
}
}
同步方法使用synchronized关键字将一个方法声明成同步方法。格式如下:

class Thread9 implements Runnable{
private int ticket = 5;
@Override
public void run() {
// TODO Auto-generated method stub
for(int i = 0; i<100; i++){
this.sale();
}
}
public synchronized void sale(){
if (ticket>0) {
try {
Thread.sleep(300);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println("买票: ticket = "+ ticket--);
}
}
}
public class SyncDemo02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread9 tt = new Thread9();
Thread t1 = new Thread(tt);
Thread t2 = new Thread(tt);
Thread t3 = new Thread(tt);
t1.start();
t2.start();
t3.start();
}
}
Java中同步的更多相关文章
- java中同步(synchronized)详解
一.开山篇: 1.synchronized的使用 一个程序中,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题.在Java中内置了语言级的同步原语--synchronized,这也大大简 ...
- Java中同步的基本概念监视器–最简单粗暴的理解方法
大学有一门课程叫操作系统,学习过的同学应该都记得,监视器是操作系统实现同步的重要基础概念,同样它也用在JAVA的线程同步中,这篇文章用一种类推的思想解释监视器"monitor". ...
- Java中同步的几种实现方式
1.使用synchronized关键字修饰类或者代码块: 2.使用Volatile关键字修饰变量: 3.在类中加入重入锁. 代码示例: 非同步状态下: public static void main( ...
- java中同步异步阻塞和非阻塞的区别
同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回. 按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等).但是一般而言,我们在说同步.异步的时候,特 ...
- java中同步嵌套引起的死锁事例代码
/* 目的:自己写一个由于同步嵌套引起的死锁! 思路:多个线程在执行时,某一时刻,0-Thread绑定了LockA锁,1-Thread绑定了LockB锁! 当0-Thread要去绑定LockB锁时 和 ...
- Java中main方面面试题
1.不用main方法如何定义一个类? 不行,没有main方法我们不能运行Java类. 在Java 7之前,你可以通过使用静态初始化运行Java类.但是,从Java 7开始就行不通了. 2.main() ...
- JAVA中关于同步与死锁的问题
java中当多个现成同时操纵同一资源的时候需要考虑同步的问题.如车站售票,不同售票点卖同一班次车票的时候就要同步,否则卖票会有问题.下面代码模拟车站卖票: class TicketSeller imp ...
- [转]关于java中的 sychronized 同步方法 与 同步块的理解
首先,需要说明一点,也是最重要的一点,无论是同步方法 还是 同步块 都是只针对同一个对象的多线程而言的,只有同一个对象产生的多线程,才会考虑到 同步方法 或者是 同步块,如果定义多个实例的同步,可以考 ...
- Java中使用CountDownLatch进行多线程同步
CountDownLatch介绍 在前面的Java学习笔记中,总结了Java中进行多线程同步的几个方法: 1.synchronized关键字进行同步. 2.Lock锁接口及其实现类ReentrantL ...
随机推荐
- [译]SQL Server 之 索引基础
SQL Server中,索引以B-tree的结构组织数据.B-tree代表平衡树,但是SQL Server使用一种叫做B+的树. B+树不是总是保持严格的平衡的树. 首先,索引有两个主要的部件:一个页 ...
- PHP描述冒泡排序和快速排序算法
使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组.使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组.写一个二维数组排序算法函数,能够具有通用 ...
- 关于sqoop与datax。 和sqoop to oracle插件OraOop
之前我还在想了解下datax,是否有可能替换sqoop,但了解后发现,datax和sqoop的业务场景是不同的.前者适合异构数据库的同步,后者适合hdfs与rdbms互相之间的同步.针对sq ...
- loadrunner解决“服务器正在运行中”方法
问题现象: 这个问题在上家公司遇见过,今天无意中找到了解决办法: 解决方法: 打开任务管理器: 找到这个进程:ThumbProcess.exe,关掉这个进程即可解决. 今天运行lr的vugen报错 解 ...
- Java的锁优化
高效并发是从JDK 1.5到JDK 1.6的一个重要改进,HotSpot虚拟机开发团队在这个版本上花费了大量的精力去实现各种锁优化技术,如适应性自旋(Adaptive Spinning).锁消除(Lo ...
- Xamarin如何生成Android项目的APK
Xamarin如何生成Android项目的APK 首先需要选择Release模式生成项目.然后从“生成”菜单中选择Export Android Package命令,就可以导出APK包.APK保存在An ...
- 发送JS错误日志到服务器
JS记录错误日志/捕捉错误 //onerror提供异常信息,文件路径和发生错误代码的行数的三个参数. window.onerror = function(e,url,index){ var msg = ...
- HDU 4679 Terrorist’s destroy
如果不在最长路的边,那么肯定是w*最长路. 如果在最长路,那么把最长路分成两段,左边树的最长路就是左段+左边点的次短路(不包含最长路上的点的最长路) ,右边同理. 还有就是更新,经过左端点的最长路,不 ...
- 安装phpunit
按照网上的提示,将go-pear.phar和phpunit.phar都放到php.exe所在的目录.但是以管理员身份运行时,输入命令php PEAR/go-pear.phar或php -d phar. ...
- 关于 swift 的图片多选问题
http://stackoverflow.com/questions/20756899/how-to-select-multiple-images-from-uiimagepickercontroll ...