java线程同步实例
2015-09-03 17:44
435 查看
import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import org.junit.Test; public class MyTest { /** * 开启两个线程来测试同步的方法 * * @throws Exception */ @Test public void testSYN() throws Exception { ExecutorService threadPool = Executors.newFixedThreadPool(2); Money money = new Money(); MyThread myThread1 = new MyThread(money, true); MyThread myThread2 = new MyThread(money, true); Future<Boolean> future1 = threadPool.submit(myThread1); Future<Boolean> future2 = threadPool.submit(myThread2); while (!(future1.get() && future2.get())) { } // 当两个线程都执行完毕,才将线程池shutdown,并输出结果. threadPool.shutdown(); System.out.println(money.count); } /** * 开启两个线程来测试不同步的方法 * * @throws Exception */ @Test public void testNotSYN() throws Exception { ExecutorService threadPool = Executors.newFixedThreadPool(2); Money money = new Money(); MyThread myThread1 = new MyThread(money, false); MyThread myThread2 = new MyThread(money, false); Future<Boolean> future1 = threadPool.submit(myThread1); Future<Boolean> future2 = threadPool.submit(myThread2); while (!(future1.get() && future2.get())) { } // 当两个线程都执行完毕,才将线程池shutdown,并输出结果. threadPool.shutdown(); System.out.println(money.count); } } class MyThread implements Callable<Boolean> { Money money; /** * true:使用同步方法; false:使用不同步方法 */ boolean useSynMethod = false; public MyThread(Money money, boolean useSynMethod) { this.money = money; this.useSynMethod = useSynMethod; } @Override public Boolean call() throws Exception { // TODO Auto-generated method stub if (useSynMethod) { for (int i = 0; i < 10000; i++) { money.addMoneySYN(); } } else { for (int i = 0; i < 10000; i++) { money.addMoneyNotSYN(); } } // 执行完成返回true return true; } } class Money { int count = 0; public Money() { // TODO Auto-generated constructor stub } public void addMoneyNotSYN() { count++; } public synchronized void addMoneySYN() { // TODO Auto-generated method stub count++; } }
相关文章推荐
- 2015年秋季阿里巴巴在线笔试——Java研发师——部分试题分析
- JavaFX屏幕截图工具ScreenCapture
- 体验Java的封装性
- Java基础针对自己薄弱环节总结06(集合全)
- Java十六进制与十进制间相互转换
- 避免代码冗余,使用接口和泛型重构Java代码
- java_Static函数
- Java 中常用缓存Cache机制的实现
- Spring注解@Scope("prototype") Spring在Action上面注解@Scope("prototype")
- 在eclipse下创建maven版的hello world
- java可变参数
- Spring mvc的相关问题
- JDK5至JDK8的新特性
- java_对象(this和成员变量和Static修饰符)
- Java利用接口和类来实现类似函数指针的功能
- Java插入数据库乱码的解决方案
- Java中对字符串的操作
- Java使用InetAddress类获取主机名和IP地址
- Java之--------JUnit软件测试技术(工具)Annotation1
- Java 程序死锁问题原理及解决方案(来源IBM开发者论坛本文作者文章)