文档章节

线程问题

小雪纷飞
 小雪纷飞
发布于 2016/12/10 19:52
字数 312
阅读 8
收藏 0

线程问题

线程锁为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
博文 15
码字总数 8311
作品 1
武汉
个人站长
私信 提问
Java 线程安全 和 非线程安全

ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?StringBuilder和StringBuffer有什么区别?这些都是Java面试中常见的基础问题。 面对这样的问题,回答是:ArrayList是非线程安全...

空云万里晴
2013/09/12
0
1
并发一:JAVA并发模型

一、并发 并发程序是指在运行中有两个及以上的任务同时在处理,与之相关的概念并行,是指在运行中有两个及以上的任务同时执行,差别是在于处理和执行。在单核CUP中两个及以上任务的处理方式是...

wangjie2016
2017/05/18
0
0
MySQL redo lock 死锁问题排查 & 解决过程

版权声明:本文由张青林原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/181 来源:腾云阁 https://www.qcloud.com/community 周一上班,首先向同事了解...

偶素浅小浅
2016/11/10
12
0
15个顶级Java多线程面试题及回答

Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题。在投资银行业务中多...

LCZ777
2014/05/27
0
0
Java 单元测试中的多线程无故退出

问题发现 最近在复习多线程相关知识,结果一动手就出现了问题,问题是这样的,在单元测试中使用多线程测试,发现只要子线程在睡眠一段时间,程序就退出了,毫无征兆!!!! 看看我的代码(请...

learn_more
2015/08/26
0
1

没有更多内容

加载失败,请刷新页面

加载更多

利用cefSharp实现网页自动注册登录的需要注册的一些事项

最近朋友有个需要自动注册登录点击的事,我帮着写了写,好久没写过这东西了,在写的过程中总结了需要注意的一些事项。 一、换IP之后要测试一下速度,我目前用的最简单的测试方法就是20-30秒加...

我退而结网
20分钟前
1
0
Go语言中使用 BoltDB数据库

boltdb 是使用Go语言编写的开源的键值对数据库,Github的地址如下: https://github.com/boltdb/bolt boltdb 存储数据时 key 和 value 都要求是字节数据,此处需要使用到 序列化和反序列化。...

Oo若离oO
21分钟前
1
0
zookeeper分布式锁

//lock 锁 定义分布式锁public interface Lock {//获取锁public void getLock();//释放锁public void unLock();} public abstract class ZookeeperAbstractLock implements Loc......

熊猫你好
28分钟前
0
0
mysql_事务隔离机制

事务隔离机制 事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在mysql中,事务支持是在引擎层实现的。mysql是一个支持多引擎的系统,但并不是所有引擎都支持事务,比如mysql...

grace_233
31分钟前
0
0
不学无数——Java中IO和NIO

JAVA中的I/O和NIO I/O 问题是任何编程语言都无法回避的问题,可以说 I/O 问题是整个人机交互的核心问题,因为 I/O 是机器获取和交换信息的主要渠道。在当今这个数据大爆炸时代,I/O 问题尤其...

不学无数的程序员
37分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部