java使用线程安全的单例模式实现网站计数器
四个java类
附上代码(比较简单)用于设计模式课程需要
登录类
package mytest.demo.WebCount;public class Login implements Runnable {// 登录名称private String loginName;public String getLoginName() {return loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}@Overridepublic void run() {// 登录成功后调用单例对象进行计数LazySingleton lazySingleton =LazySingleton.getInstance();lazySingleton.setCount();System.out.println(getLoginName()+"登录成功:"+lazySingleton);//创建窗口,但是加了之后影响了随机性,所以在run函数里加就行了new LoginWindows("用户登录",getLoginName());}
}
加个简单可视化界面
package mytest.demo.WebCount;import java.awt.*;
import java.awt.event.*;
import java.awt.Container;import javax.swing.JFrame;
import javax.swing.JLabel;public class LoginWindows extends JFrame { //需要继承JFramepublic LoginWindows(String title, String userInfo) {JFrame jf = new JFrame(title);Container conn = jf.getContentPane(); //得到窗口的容器JLabel L1 = new JLabel(userInfo+"已登录"); //创建一个标签 并设置初始内容conn.add(L1);jf.setBounds(200, 200, 300, 200); //设置窗口的属性 窗口位置以及窗口的大小jf.setVisible(true);//设置窗口可见jf.setDefaultCloseOperation(DISPOSE_ON_CLOSE); //设置关闭方式 如果不设置的话 似乎关闭窗口之后不会退出程序}
}
线程安全的单例类,读者可以试一下简单单例类的实现结果是什么样子的
package mytest.demo.WebCount;import java.util.concurrent.atomic.AtomicLong;public class LazySingleton {// 单例对象 ,加入volatile关键字进行修饰private static volatile LazySingleton APP_INSTANCE;// 计数器private AtomicLong count = new AtomicLong(0);// 单例模式必须保证默认构造方法为私有类型private LazySingleton() {}public static LazySingleton getInstance() {if (APP_INSTANCE == null) {// 对类进行加锁,并进行双重检查synchronized (LazySingleton.class) {if (APP_INSTANCE == null) {APP_INSTANCE = new LazySingleton();}}}return APP_INSTANCE;}public AtomicLong getCount() {return count;}public void setCount() {count.addAndGet(1);}
}
主函数
package mytest.demo.WebCount;public class Main {public final static int num = 7;public static void main(String[] args) throws InterruptedException {Thread[] threads = new Thread[num];for (int i = 0; i < num; i++) {Login login = new Login();login.setLoginName("" + String.format("%2s", (i + 1)) + "号用户");threads[i] = new Thread(login);threads[i].start();}for (int i = 0; i < threads.length; i++) {threads[i].join();}// 调用单例对象输出登录人数统计System.out.println("网站共有" + LazySingleton.getInstance().getCount() + "个用户登录");}
}
运行结果:
java使用线程安全的单例模式实现网站计数器相关推荐
- java 静态内部类 线程安全问题_单例模式的七种写法, 面试题:线程安全的单例模式...
http://cantellow.iteye.com/blog/838473 http://meizhi.iteye.com/blog/537563 第一种(懒汉,线程不安全): Java代码 pu ...
- Java中线程安全的单例模式
写出一个单例模式(Singleton Pattern) public final class EagerSingleton { private static EagerSingleton sin ...
- java 线程安全的单例_线程安全的单例模式的几种实现
单例模式是常见的设计模式之一:目的是节省内存,限制了实例的个数:有利于java GC回收机制. 单例模式的三个好处: 1.控制资源的使用,通过线程同步来控制资源的并发访问 2.控制实例的产生个数,来达 ...
- JAVA的多线程、死锁、线程间通信、如何规避死锁、线程安全的单例模式
主要内容: 多线程 线程和进程间的关系 Java中的线程理论 Java中线程类的实现方式 Java中线程的常用方法 线程安全性问题 线程间通信 线程的死锁 如何规避死锁 线程安全的单例模式 多线程 线 ...
- java线程池使用单例模式
一.线程池不使用单例模式 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;publ ...
- java 父线程_Java父线程(或是主线程)等待所有子线程退出的实例
导读热词 实例如下: static void testLock1(){ final AtomicInteger waitCount = new AtomicInteger(30000); final ...
- Android之线程安全的单例模式,Adapter注意事项之引用传值
线程安全的单例模式 单位模式一般写法如下: public static FestivalLab mInstance; private FestivalLab() { } public static F ...
- java中断线程_Java中断线程的方法
使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回.这 ...
- java面试线程必备知识点,怼死面试官,从我做起
转载自 java面试线程必备知识点,怼死面试官,从我做起 |--多线程一定好么? cpu密集不好 io密集好 |--如何减少上下文切换: 无锁并发(数据id根据Hash分段).CAS.最少线程 |-- ...
最新文章
- 谈谈HTML5中的history.pushSate方法,弥补ajax导致浏览器前进后退无效的问题
- 用上这个Python的Docker正式版镜像,你也能成为容器高玩
- 插值搜索——本质和二分无异,是利用数据分布的规律来定查找点,其基本假设是数据分布均匀...
- mysql正在加载_mysql 数据库基本操作
- UnityShader2:Shader与材质
- C#3.0学习(1)---隐含类型局部变量和扩展方法
- vue横向树结构_vue组件横向树实现代码
- 阿里云分布式调度系统-伏羲
- 两侧广告HTML,jquery实现两边飘浮可关闭的对联广告
- 2022年Google开发者大会纪录
- JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤
- unity3d开发 打飞机小游戏(五)(飞机移动/敌机死亡动画)
- 《关键对话》如何高效能沟通之何谓关键对话
- python开发板卡驱动开发_树莓派开发板如何驱动LED灯
- coap 返回版本信息_CoAP协议学习笔记
- VOC数据集制作 滑窗切分图片 单通道标签调色板
- texstudio暗色主题2.0
- Pythom爬虫之图虫小姐姐图片的爬取:
- 机器翻译的评价标准BLEU(Evaluation criteria for machine translation)
- mysql的text与tinytext_MySQL中tinytext、text、mediumtext和longtext等各个类型详解
热门文章
- orangepi+腾讯云服务器+frp配置内网穿透
- 华为:解读下一代视频压缩标准HEVC(H.265)
- DNS 标志位简要解析
- Exception in thread“main“java.lang.IllegalArgument Exception:Unsupported class file major version 58
- 培训班面试一个月入职了一家外包公司(谈谈感悟)
- 《阿弥陀佛么么哒》读后感
- Linux基础命令(小白教程,宝妈式教程,有手就会)第一期
- Linux音频软件:Alsa、OSS和Pulseaudio、ESD、
- 何光驰老师-沪师经纪
- 荧光法双链DNA检测工具—Pico488 dsDNA 定量试剂盒