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 ...
随机推荐
- Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能 (转)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9255575 最 近项目中需要用到ListView下拉刷新的功能,一开始想图省事,在 ...
- web的三种监听器
servletcontextlistener servletrequestlistener httpsessionlistener
- eclipse下提交job时报错mapred.JobClient: No job jar file set. User classes may not be found.
错误信息: 11/10/14 13:52:07 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. A ...
- Winedt打开tex文件报错error reading的解决方案
我刚装就发现winedt打开一些.tex文件时会出现reading error,然后看不到任何文字(网上有人讨论打开是乱码的问题,但是我的是完全看不到任何东西),我的系统winxp,网上有人说好像是和 ...
- 参加 TiD 2015 是怎样一番体验?
人生有很多第一次,(专程打飞的去帝都)参加软件大会,我也是第一次. TiD 说到软件大会,QCon.PyCon 什么的早已如雷贯耳,没吃过猪肉还没见过猪跑?但对于 TiD,确实还是头一次听说. ...
- FZU2215 Simple Polynomial Problem(中缀表达求值)
比赛时没做出这题太可惜了. 赛后才反应过来这就是个中缀表达式求值,数字栈存的不是数字而是多项式. 而且,中缀表达式求值很水的,几行就可以搞定. #include<cstdio> #incl ...
- 算法教程(2)zz
In the previous section we saw how to use vectors to solve geometry problems. Now we are going to le ...
- BZOJ4373 : 算术天才⑨与等差数列
设$pre[i]$表示第$i$个数上一次出现的位置,$d[i]=abs(a[i]-a[i+1])$. 用线段树维护区间内$a$的最小值.最大值,$pre$的最大值以及$d$的$\gcd$. 对于询问$ ...
- BZOJ3648 : 寝室管理
求环套外向树上节点数不小于K的路径数. 首先树的话直接点分治+树状数组$O(n\log^2n)$搞定 环套树的话,先删掉多余的边(a,b) 然后变成了一棵树,直接点分治 然后在树上找到a到b的路径,将 ...
- TYVJ P1045 &&洛谷 1388 最大的算式 Label:dp
描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号.例 ...