java中结合单例模式,控制单例类的某方法在被多线程调用时,只被1个线程调用执行,执行完毕后才被另一线程调用
2013-01-20 12:05
405 查看
示例代码:
1、定义单例类
2、调用此方法的类
3、多线程并发调用
4、执行结果,验证print方法同时只被1个线程调用执行
1、定义单例类
package sigle; //懒汉式单例类.在第一次调用的时候实例化 public class Singleton { //私有的默认构造子 private Singleton() { //初始化标识位 setFlag(true); } //注意,这里没有final private static Singleton single=null; //静态工厂方法 public synchronized static Singleton getInstance() { if (single == null) { single = new Singleton(); } return single; } //标识方法是否在调用中 true为调用中,false标识调用完毕 private static boolean Flag; //演示方法调用 public void Print() { setFlag(false); System.out.print("准备运行--》\n"); try { for (int i = 0; i < 5; i++) { System.out.print("运行中。。。。。\n"); Thread.sleep(1000); } } catch (Exception e) { } System.out.print("运行完毕--》\n"); //设置标识值为true setFlag(true); } public static boolean getFlag() { return Flag; } private void setFlag(boolean flag) { Flag = flag; } }
2、调用此方法的类
package sigle; public class Run extends Thread{ Singleton s2; public Run() { s2=Singleton.getInstance(); } public void run(){ //循环判断 while (true) { if (Singleton.getFlag()) { s2.Print(); break;//执行完毕退出循环 }else { try { System.out.print(this.getName()+"在等待。。\n"); Thread.sleep(1000); } catch (Exception e) { } } } } }
3、多线程并发调用
package sigle; public class MyRun { /** * @param args */ public static void main(String[] args) { Run r1=new Run(); Run r2=new Run(); Run r3=new Run(); r1.setName("线程1号"); r2.setName("线程2号"); r3.setName("线程3号"); r1.start(); r2.start(); r3.start(); } }
4、执行结果,验证print方法同时只被1个线程调用执行
准备运行--》 线程2号在等待。。 线程3号在等待。。 运行中。。。。。 运行中。。。。。 线程2号在等待。。 线程3号在等待。。 运行中。。。。。 线程2号在等待。。 线程3号在等待。。 线程3号在等待。。 线程2号在等待。。 运行中。。。。。 运行中。。。。。 线程3号在等待。。 线程2号在等待。。 运行完毕--》 准备运行--》 运行中。。。。。 线程3号在等待。。 运行中。。。。。 线程3号在等待。。 运行中。。。。。 线程3号在等待。。 线程3号在等待。。 运行中。。。。。 运行中。。。。。 线程3号在等待。。 运行完毕--》 线程3号在等待。。 准备运行--》 运行中。。。。。 运行中。。。。。 运行中。。。。。 运行中。。。。。 运行中。。。。。 运行完毕--》
相关文章推荐
- java中结合单例模式,控制单例类的某方法在被多线程调用时,只被1个线程调用执行,执行完毕后才被另一线程调用
- java多线程 主线程等子线程执行完毕
- Java线程运行周期方法和多线程模式概述
- Java多线程、主线程等待所有子线程执行完毕、共享资源
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法二)
- Java多线程--让主线程等待所有子线程执行完毕【转】
- Java多线程--主线程等待所有子线程执行完毕
- java多线程实现主线程等待所有子线程执行完毕
- Java多线程--让主线程等待所有子线程执行完毕
- Java多线程--让主线程等待所有子线程执行完毕
- Java多线程--让主线程等待所有子线程执行完毕代码
- java 多线程控制线程执行顺序
- Java多线程--让主线程等待所有子线程执行完毕
- 多线程线程池控制一个方法的并发量 限制只有5个线程执行任务
- Java多线程--让主线程等待所有子线程执行完毕
- [置顶] [转]Java多线程--让主线程等待所有子线程执行完毕
- Java多线程--让主线程等待所有子线程执行完毕
- java中控制线程间执行顺序的方法
- 黑马程序员-------------多线程中的(线程、线程组、线程池、以及Java的设计模式)概念及方法的总结
- Java 多线程 (PART VII) 使用join()方法保证线程的执行顺序