java线程中线程同步
2011-11-14 10:57
183 查看
***一个Thread对象只能开启一个线程,而一个实现了Runnable接口的对象可以开启多个线程***
在实际项目开发中,我们往往需要注意数据的敏感性,特别是对于数据极其敏感的行业项目,所以我们需要使用线程同步来解决这些问题!如下面的代码
上面代码显示的不是我们希望看到的结果,因为他们是同时操作的同一个对象,如同购物,你拿十元可以同时购买所有十元以下的商品一样!
所以必需对其做一定的修改:
这样,锁定当前使用对象,那么其他的线程就不能在当前线程使用的同时而使用它了!
在实际项目开发中,我们往往需要注意数据的敏感性,特别是对于数据极其敏感的行业项目,所以我们需要使用线程同步来解决这些问题!如下面的代码
public class TestThread implements Runnable { Timer timer = new Timer(); public static void main(String[] args) { TestThread t = new TestThread(); Thread tt1 = new Thread(t); Thread tt2 = new Thread(t); Thread tt3 = new Thread(t); tt1.setName("tt1"); tt2.setName("tt2"); tt3.setName("tt3"); tt1.start(); tt2.start(); tt3.start(); } public void run() { timer.show(Thread.currentThread().getName()); } } class Timer { private static int i = 0; public void show(String name) { i++; try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("这是第" + i + "个Timer,名为:" + name); } }
上面代码显示的不是我们希望看到的结果,因为他们是同时操作的同一个对象,如同购物,你拿十元可以同时购买所有十元以下的商品一样!
所以必需对其做一定的修改:
public class TestThread implements Runnable { Timer timer = new Timer(); public static void main(String[] args) { TestThread t = new TestThread(); Thread tt1 = new Thread(t); Thread tt2 = new Thread(t); Thread tt3 = new Thread(t); tt1.setName("tt1"); tt2.setName("tt2"); tt3.setName("tt3"); tt1.start(); tt2.start(); tt3.start(); } public void run() { timer.show(Thread.currentThread().getName()); } } class Timer { private static int i = 0; public void show(String name) { synchronized (this) { i++; try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("这是第" + i + "个Timer,名为:" + name); } } }
这样,锁定当前使用对象,那么其他的线程就不能在当前线程使用的同时而使用它了!
相关文章推荐
- 【Java基础之线程同步(二)】java线程同步:synchronized关键字,Lock接口以及可重入锁ReentrantLock
- Java并发编程之线程管理(基本线程同步2)
- Java线程之线程同步synchronized和volatile
- java线程(二)线程同步问题
- Java并发编程之线程管理(高级线程同步7)
- Java线程(二):线程同步synchronized和volatile
- java 线程synchronized 线程同步
- Java线程之线程同步
- Java线程 ,线程同步详解,单例
- 深入解析Java的线程同步以及线程间通信
- 从java多线程实现“生产者-消费者”模型来谈谈操作系统中线程状态的转换及线程同步的总结
- Java基础之线程——管理线程同步代码块(BankOperation4)
- java线程学习5——线程同步之同步方法
- Java线程(二):线程同步synchronized和volatile
- Java线程知识__其他几种线程同步的工具类的使用(CyclicBarrier,CountDownLatch,Exchanger)
- java中的线程-继承thread-实现runnable接口以及线程同步
- java学习初探十八之线程的线程同步_锁机制_synchronized
- java线程学习4——线程同步之同步代码块
- java线程安全和线程同步
- 线程高级应用-心得5-java5线程并发库中Lock和Condition实现线程同步通讯