首页 > 其他 > 详细

同步锁

时间:2020-10-27 20:30:09      阅读:30      评论:0      收藏:0      [点我收藏+]
同步锁	
--1,概述
锁是指  把共享资源 锁住
同步是指 其他线程 排队等待钥匙的现象
专门用来解决 多线程 中共享数据有隐患的问题
使用synchronized关键字表示锁
在多线程编程里, 有多条语句操作 了 共享资源 ,一定会有隐患!!!		
--2,用法
--用在方法上/同步方法
synchronized public void eat(){}
--用在代码块上/同步代码块
synchronized(锁对象){.......}
--3,改造售票代码
--implements Runnable

测试
public class C2 {
public static void main(String[] args) {
Ticket target = new Ticket();
Thread t = new Thread(target);
Thread t2 = new Thread(target);
Thread t3 = new Thread(target);
Thread t4 = new Thread(target);
t.start();
t2.start();
t3.start();
t4.start();
}
}

class Ticket implements Runnable{
int ticket = 100;
Object o = new Object();
String s ="13";
@Override
//TODO 1,现在由于多线程 中,,对于共享资源进行了抢的操作,所以共享资源不安全
//可以使用锁 来保证安全,但是牺牲性能.synchronized表示锁
//锁可以用在方法上也可以用在代码块上.
//同步方法 synchronized public void run() {
//同步代码块 -- synchronized(锁对象){有问题代码}
public void run() {
while (true){
//TODO 2,同步代码块:需要考虑两个问题
//1,锁的位置(合理位置,从开始用到用完结束) 2,锁对象(可以任务,但必须是同一个对象)
//synchronized(new Object()){//四个线程new了4把锁,不是同一个锁对象,错的
//synchronized(o){//同一个锁对象,OK
//synchronized(s){//同一个锁对象,OK
synchronized (this) {
if (ticket > 0) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "--" + ticket--);
} else {
break;
}
}
}
}
}


同步锁

原文:https://www.cnblogs.com/liang-shi/p/13887141.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!