博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程问题
阅读量:7219 次
发布时间:2019-06-29

本文共 2211 字,大约阅读时间需要 7 分钟。

hot3.png

线程问题

线程锁为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;	}}

猜猜分别输出结果?

转载于:https://my.oschina.net/u/1377077/blog/803749

你可能感兴趣的文章
redis的过期策略以及内存淘汰机制
查看>>
阿牛的EOF牛肉串
查看>>
随笔2013/2/13
查看>>
笨办法32循环和列表
查看>>
java序列化
查看>>
谈谈NITE 2的第一个程序HandViewer
查看>>
VS2008 未响应 假死
查看>>
html5、css3及响应式设计入门
查看>>
Win10還原成最乾淨的狀態
查看>>
Java_InvokeAll_又返回值_多个线程同时执行,取消超时线程
查看>>
SaltStack作业
查看>>
单例设计
查看>>
springboot+缓存
查看>>
/*10个filter的属性*/ ---毛玻璃效果
查看>>
折半查找习题解答
查看>>
51单片机的P1
查看>>
[32]JSON
查看>>
3689: 异或之
查看>>
字符串模式匹配KMP算法
查看>>
Android Drawable和Bitmap图片之间转换
查看>>