JAVA学习第二十五课(多线程(四))- 单例设计模式涉及的多线程问题
一、多线程下的单例设计模式
利用双重推断的形式解决懒汉式的安全问题和效率问题
//饿汉式
/*class Single
{
private static final Single t = new Single();
private Single(){} //private构造函数,确保其它类对象不能直接new一个该对象实例 public static Single getInstance()
{
return t;
}
}
*/ //懒汉式
class Single
{
private static Single t = null;
private Single(){}
public static Single getInstance() //同步函数就不是必需了,同步整个函数致使效率减少
{
if(t==null)//解决效率问题
{
synchronized(Single.class)//解决安全问题
{
if(t==null)
t = new Single();
} }
return t;
}
}
所以说开发中还是应用饿汉式,可是在面试里考察懒汉式,由于其技术含量高
二、死锁演示样例
死锁是线程间相互等待锁锁造成的
死锁:常见就是,同步的嵌套
面试时。会让写死锁程序,仅仅要写的出来。就说明死锁已经理解
class Deadlock implements Runnable
{
private boolean flag;
public Deadlock(boolean flag) {
// TODO Auto-generated constructor stub
this.flag = flag;
}
public void run()
{
if(flag)
{
while(true)
synchronized (lock.A_LOCK) {
System.out.println("if...alock");
synchronized (lock.B_LOCK) {
System.out.println("if...block");
}
}
}
else {
while(true)
synchronized (lock.B_LOCK) {
System.out.println("else...block");
synchronized (lock.A_LOCK) {
System.out.println("else...alock"); }
}
}
}
} class lock
{
public static final Object A_LOCK = new Object();
public static final Object B_LOCK = new Object(); }
class Main
{
public static void main(String[] args)
{
Deadlock t1 = new Deadlock(true);
Deadlock t2 = new Deadlock(false);
Thread j1 = new Thread(t1);
Thread j2 = new Thread(t2);
j1.start(); j2.start(); }
}
if...alock
else...block
锁上了,j1线程拿a锁,j2线程拿b锁,两者都在等待,可是不释放锁,就形成了死锁,致使程序死掉,在开发中发生死锁的概率很低。
由于在代码内某处,CPU肯定会切换还有一线程,所以死锁的情况发生的概率极低。可是一旦发生,程序就会彻底卡壳
关于线程同步问题和锁的总结:
静态和非静态方法的锁互不干预。
一个线程获得锁,当在一个同步方法中訪问另外对象上的同步方法时,会获取这两个对象锁。
JAVA学习第二十五课(多线程(四))- 单例设计模式涉及的多线程问题的更多相关文章
- JAVA学习第二十六课(多线程(五))- 多线程间的通信问题
一.线程间的通信 实例代码: 需求是:输入一个姓名和性别后,就输出一个姓名和性别 class Resource { String name; String sex ; } class Input im ...
- JAVA学习第二十九课(经常使用对象API)- String类
多线程告一段落,開始经常使用对象API的涉及,背也要背下来!.! 日后开发,遇见最多的对象是文字,也就是字符串 String类 字符串是一个特殊对象 字符串一旦初始化就不能够被改变 一.特点 publ ...
- Java学习第二十五天
1:如何让Netbeans的东西Eclipse能访问. 在Eclipse中创建项目,把Netbeans项目的src下的东西给拿过来即可. 注意:修改项目编码为UTF-8 2:GUI(了解) (1)用户 ...
- Python学习第二十五课——Mysql (多表查询)
多表查询: 内连接查询: 首先:创建两个表一个为tableA,一个为tableB,并且插入数据(代码省略) 同时查询两个表的记录: select * from tableA,tableB; 根据tab ...
- 风炫安全WEB安全学习第二十五节课 利用XSS键盘记录
风炫安全WEB安全学习第二十五节课 利用XSS键盘记录 XSS键盘记录 同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源.所以xyz.com下的js脚本采用a ...
- NeHe OpenGL教程 第二十五课:变形
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
JAVA之旅(十四)--静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制 JAVA之旅,一路有你,加油! 一.静态同步函数的锁是clas ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第十五周
java学习第十五周 Java的GUI界面设计,框架以及主要部件填充,归置,布局管理,在第十一章和第十二章进行了系统的学习,在这两章的知识奠基下,可以简单的构造一个GUI用户界面,在两周的学习后,可以 ...
- 风炫安全web安全学习第二十八节课 CSRF攻击原理
风炫安全web安全学习第二十八节课 CSRF攻击原理 CSRF 简介 跨站请求伪造 (Cross-Site Request Forgery, CSRF),也被称为 One Click Attack 或 ...
随机推荐
- pat 团体天梯赛 L3-007. 天梯地图
L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校 ...
- SQL查询数据后在连成字符串方法
CREATE TABLE tb ( user_id INT, type_id TINYINT ); INSERT INTO tb (user_id, type_id) VALUES (1,11); I ...
- BZOJ 3910: 火车
3910: 火车 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 358 Solved: 130[Submit][Status][Discuss] D ...
- 30+ Excellent Windows Phone 7 Development Tutorials
原文发布时间为:2012-01-16 -- 来源于本人的百度文章 [由搬家工具导入] Here are 30+ cool Windows Phone Development articles for ...
- poj 2280 Islands and Bridges 哈密尔顿路 状压dp
题目链接 题意 给定一个\(N\)个点的无向图,求一条哈密尔顿路径\(C_1C_2...C_n\),使其\(value\)最大. \(value\)的计算方式如下:\[\begin{aligned}v ...
- 学习环境配置:Manjaro、MSYS2以及常见软件
0.前言 在说Manjaro之前,要先说一下Linux发行版.对于各大发行版而言,内核只有版本的差异,最重要的区别就是包管理系统.常见的包管理系统包括:Pacman,Apt , Yum和Portage ...
- selenium入门教程c#
一. 简述 1. 介绍 Selenium是ThoughtWorks专门为Web应用程序编写的一个验收测试工具. Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE. ...
- C++ primer分章节快速回顾
第三章: 1,sozeof(int): int n_int=INT_MAX; sizeof n_int;(对变量括号可选) 2,#include<climits>包含一些类型的最大值3,c ...
- Educational Codeforces Round 35 A. Nearest Minimums【预处理】
[题目链接]: Educational Codeforces Round 35 (Rated for Div. 2) A. Nearest Minimums time limit per test 2 ...
- HDU5877 Weak Pair
题目链接 Weak Pair 题意十分明确, 就是求出符合题意的有序点对个数. 首先对ai离散,离散之后的结果用rk[i]表示,然后进行二分预处理得到f[i],其中f[i]的意义为:其他的点和i这个节 ...