/*
* 【【静态同步函数】】
* 静态同步函数,对象使用的【不是this】
* 通过验证,发现不是this 因为静态方法中,不可以定义this。
*
* 静态进内存的时候,内存中没有本类对象,但是,一定有该类对应的字节码文件对象
* 类名.class 该对象的类型是: Class
*
* 静态的同步函数对象是,该类对应的字节码文件对象 就是 类名.class
*/
class Ticket5 implements Runnable{//方式二
private static int tick=100;
boolean flag=true;
public void run(){
if(flag){
while(true){
//synchronized(this){//this 不知道为什么我的程序用this其实没有出现过0
synchronized(Ticket5.class){//更换为Ticket5.class 不在出现0 线程安全。
if(tick>0){
try{
Thread.sleep(10);//【a】
}
catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"买票"+(tick--));
}
}
}
}
else{
while(true)
show();
}
}
public static synchronized void show(){
if(tick>0){
try{
Thread.sleep(10);//【a】
}
catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"show"+(tick--));
}
}
}
public class D_Th_test6{
public static void main(String[] args) {
Ticket4 t=new Ticket4();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
t1.start();
try{
Thread.sleep(10);//【a】
}
catch(Exception e){}
t.flag=false;
t2.start();
}
}
-----------------------------------------------------------------------------------------------
package _Day11;
/*
* 返回来再看看 单列设计模式
*
* 死锁: 同步中嵌套同步
* 设计时一定要避免死锁。
*/
//饿汉式
/*
class Single{
private static final Single s=new Single();
private Single(){}
public static void Single getInstance(){
return s;
}
}
*/
//懒汉式
class Single{
private static Single s=null;
private Single(){}
public static Single getInstance(){
if(s==null){
synchronized(Single.class){
if(s==null)
s=new Single();
}
}
return s;
}
}
public class D_Th_test7 {
}
黑马官网: http://edu.csdn.net/heima