发布于2020-11-19 20:43 阅读(1034) 评论(0) 点赞(26) 收藏(5)
同步代码块
,后者同步方法
它可以是任意的对象 锁对象``只是做一个标记
,只有持有锁对象的线程才能够进行到同步代码块。
class SaleTicket implements Runnable {
int tikets = 100;//1: 100张票
//锁对象:只是一个标记相当于true,false,任何对象都可以
private static final Object lock = new Object();
@Override
public void run() {
//逻辑代码
while (true) {
try {
Thread.sleep(50);//磨叽
} catch (InterruptedException e) {
e.printStackTrace();
}
//判断是否有锁,如果有锁则获得锁,进入代码块,否则,只有在代码块外等锁
synchronized (lock){//获得锁
//如果票数> 0 ,退出
if (tikets > 0) {
tikets--;
System.out.println("还剩余" + tikets + "张");
}else{
break;
}
}//释放锁
}
}
}
非静态
的,那么这个锁对象是this
静态
的,那么这个锁对象是当前类类名.class
class SaleTicket implements Runnable {
static int tikets = 100;//1: 100张票
//锁对象:只是一个标记相当于true,false,任何对象都可以
@Override
public void run() {
//逻辑代码
while (true) {
try {
Thread.sleep(50);//磨叽
} catch (InterruptedException e) {
e.printStackTrace();
}
sell2();
}
}
//判断是否有锁,如果有锁则获得锁,进入代码块,否则,只有在代码块外等锁
synchronized void sell (/* this */){//获得锁
//如果票数> 0 ,退出
if (tikets > 0) {
tikets--;
System.out.println("还剩余" + tikets + "张");
}
}//释放锁
//判断是否有锁,如果有锁则获得锁,进入代码块,否则,只有在代码块外等锁
synchronized static void sell2 (/* SaleTicket.class */){//获得锁
//如果票数> 0 ,退出
if (tikets > 0) {
tikets--;
System.out.println("还剩余" + tikets + "张");
}
}//释放锁
}
public class Demo08 {
private static Object lockA = new Object();
private static Object lockB = new Object();
//只有同时有两把锁才能执行代码
private static class Task1 implements Runnable {
@Override
public void run() {
while (true) {
synchronized (lockA) {//获取了锁A 进入房间1
System.out.println("获取了锁A 进入房间1");
synchronized (lockB) {//获取了锁B 进入房间2
System.out.println("获取了锁B 进入房间2");
System.out.println("执行了 Task1");
}//释放锁B 出房间2
}//释放锁A 出房间1
}
}
}
private static class Task2 implements Runnable {
@Override
public void run() {
while (true) {
synchronized (lockB) {
System.out.println("获取了锁B 进入房间2");
synchronized (lockA) {
System.out.println("获取了锁A 进入房间1");
System.out.println("执行了 Task2");
}
}
}
}
}
public static void main(String[] args) {
Task1 task1 = new Task1();
Task2 task2 = new Task2();
Thread t1 = new Thread(task1);
Thread t2 = new Thread(task2);
t1.start();
t2.start();
}
}
作者:你不要惹我
链接:http://www.javaheidong.com/blog/article/779/c9ac4adb608d483d1903/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!