线程问题
线程问题
小雪纷飞 发表于1年前
线程问题
  • 发表于 1年前
  • 阅读 6
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

线程问题

线程锁为threadNo,每个线程threadNo唯一,达不到互斥最后资源recources不能同步

package len_server;

public class ThreadTest2 extends Thread {

  
	private  String threadNo;
	private  String lock;   

	private static int recources=100;//需要同步的资源对象   
 
	public ThreadTest2(String threadNo,String lock) {   
		this.threadNo = threadNo;  
		this.lock=lock;
	}   
	
	public static void main(String[] args) throws InterruptedException {
		for (int i = 1; i <=3; i++) {   
			ThreadTest2 t=new ThreadTest2(String.valueOf(i),"abc");
		    t.start();   
		 }
		sleep(2000);
		System.out.println("=================================");
		System.out.println(recources);//打印结果
	}
   
    public void run() {
    	
    	synchronized (this.getThreadNo()) {
    		int flag=recources;  //模拟查询余额
    		try {
				sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
    		recources=flag+1;//模拟存款
		}
    	
    }
    
    

	public String getThreadNo() {
		return threadNo;
	}
	public void setThreadNo(String threadNo) {
		this.threadNo = threadNo;
	}
	public String getLock() {
		return lock;
	}
	public void setLock(String lock) {
		this.lock = lock;
	}
}

线程锁为lock,每个线程的lock相同,也就是锁对象相同能实现资源同步

package len_server;

public class ThreadTest2 extends Thread {

  
	private  String threadNo;
	private  String lock;   

	private static int recources=100;//需要同步的资源对象   
 
	public ThreadTest2(String threadNo,String lock) {   
		this.threadNo = threadNo;  
		this.lock=lock;
	}   
	
	public static void main(String[] args) throws InterruptedException {
		for (int i = 1; i <=3; i++) {   
			ThreadTest2 t=new ThreadTest2(String.valueOf(i),"abc");
		    t.start();   
		 }
		sleep(2000);
		System.out.println("=================================");
		System.out.println(recources);//打印结果
	}
   
    public void run() {
    	
    	synchronized (this.getLock()) {
    		int flag=recources;  //模拟查询余额
    		try {
				sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
    		recources=flag+1;//模拟存款
		}
    	
    }
    
    

	public String getThreadNo() {
		return threadNo;
	}
	public void setThreadNo(String threadNo) {
		this.threadNo = threadNo;
	}
	public String getLock() {
		return lock;
	}
	public void setLock(String lock) {
		this.lock = lock;
	}
}

猜猜分别输出结果?

共有 人打赏支持
粉丝 4
博文 12
码字总数 7233
作品 1
×
小雪纷飞
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: