java线程的同步安全问题三种解决办法

package xiancheng;


import xiancheng.Table.Person;


public class Threadsafe {


public static void main(String[] args) {
// TODO 自动生成的方法存根
Table table=new Table();
Person p1=table.new Person();
 
Person p2=table.new Person();
         p1.start();
         p2.start();
  /*
   * Thread-0,20
Thread-1,19
Thread-0,18
Thread-1,17
Thread-0,16
Thread-1,15注意这里出现的线程安全问题
   * */

     }


}


class Table{
int beans=60;
Object monitor=new Object(); //还有这里也是一种,而且一定要写在方法的外面,不如调用一次会有一个锁,那就不是一个锁,也没有意义了
public /*synchronized  这里直接修饰的是一种  */ int getBean(){
//synchronized (this) {  //这里注释的是一种


synchronized (monitor) {



if(beans==0)throw new RuntimeException("没了");
Thread.yield();
return beans--;
//}
}
}




class Person extends Thread{
@Override
public void run() {
// TODO 自动生成的方法存根
while(true){
 int bean=getBean();
 System.out.println(getName()+","+bean);
     Thread.yield();
      
   }}}}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值