java runable接口synchronized(this){}模块实现线程同步

本文介绍了一个使用synchronize关键字实现线程同步的经典案例。通过模拟10个人依次通过狭窄山洞的过程,演示了如何确保同一时刻只有一个线程可以访问稀缺资源。每个线程通过山洞时会打印出其名称及通过顺序。
/*
* 利用synchronize进行线程同步,访问稀缺资源,同一时刻只能一个线程访问关键资源,刷新资源状态;
*
* task:10个人抢着通过1个山洞,每个人穿山洞耗时1s;
* 1)打印出穿越山洞的人,并显示它是通过的次序,名称
* */

public class threadSync0105 {
//通过runable接口重写来实现,synchronize(this)同步
//new runable接口传递给10个新建的线程, runable overwrite
    public static void main(String[] args){
       Runnable ri = new Runnable() {
           private int cnt = 1;
           @Override
           public void run() {
               synchronized (this) {
                   try {
                     Thread.sleep(100);
                   } catch (InterruptedException e) {
                       e.printStackTrace();
                   }

                   new print2().print(Thread.currentThread().getName() + " 通过山洞,他是第" + cnt);
                   cnt ++;
               }
           }
       };

       for (int i = 0; i < 10; i ++) {
           new Thread(ri, "线程" + i).start();
       }
    }

}
class print2{
    public void print(String str) {
        System.out.println(str);
    }
}

results:

线程0 通过山洞,他是第1
线程8 通过山洞,他是第2
线程7 通过山洞,他是第3
线程9 通过山洞,他是第4
线程6 通过山洞,他是第5
线程5 通过山洞,他是第6
线程4 通过山洞,他是第7
线程2 通过山洞,他是第8
线程1 通过山洞,他是第9
线程3 通过山洞,他是第10

Process finished with exit code 0

  • 所谓“同步”翻译自“synchronize”名称,意思是多核程序的可见性、原子性和保序性导致的关键资源状态、更新问题;需要改并发程序为展示的“串行”方式;
  • 同步意思实际是非并发态,独占式访问,为了运行安全暂时牺牲效率。一个个线程轮流运行(尽管多线程下这个次序是竞争性,不确定的)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值