同步方法和同步块

同步代码块

synchronized(任意类型的对象,相当于一把锁){代码块}:

当线程抢到了CPU资源,CPU会执行完当前线程的代码,CPU再进入下一次被争夺中(防止了当前线程代码块还未执行完,就进入下一个线程,导致数据紊乱)

synchronized (account){ //同步锁,锁的对象应该是会变化的量
//余额不足,取不了钱
if(account.num-getMoney<=0){
System.out.println("你好"+this.getName()+"余额不足");
return;
}
account.num = account.num-getMoney;
nowMoney = nowMoney+getMoney;
System.out.println(this.getName()+"手上有"+nowMoney);
System.out.println(account.name+"余额为"+account.num);
}

同步方法

用synchronized去修饰方法,就成了同步方法。也就是将第一种方法的代码块用方法封装起来了

修饰普通方法的锁时,他的锁是:this(也就是创建的对象)
修饰静态方法时,他的锁是:类名.class

package com.Luoking.Thread;
public class Runnable01{
public static void main(String[] args) {
BuyTick runnable01 = new BuyTick();
new Thread(runnable01, "小名").start();
new Thread(runnable01, "小杰").start();
new Thread(runnable01, "小平").start();
new Thread(() -> System.out.println("lamda表达式")).start();
}
}
class BuyTick implements Runnable{
private int tickets = 100;
@Override
public void run() {
buy();
}
public synchronized void buy(){
while(true){
if (tickets<=0){
break;
}
System.out.println(Thread.currentThread().getName()+"拿到第"+tickets--+"张票");
}
}
}
posted @   小罗要有出息  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示