多线程——静态同步函数的锁的相关问题

来源:互联网 发布:职业选手训练软件 编辑:程序博客网 时间:2024/06/05 06:00
package com.qianfeng.demo01;/** * 关于静态同步函数使用的锁 *  * 静态同步函数的锁是什么呢? * 静态随着类的加载而加载,而这时内存中存储的对象至少有一个,也就是该类的字节码文件对象。 *  * 这个对象的表现形式:类名.class  他表示字节码文件对象,   Class类的对象 * */public class ThreadDemo03 {public static void main(String[] args) {SaleTicket02 st = new SaleTicket02();System.out.println(st.isFlag());    //trueThread t1 = new Thread(st);Thread t2 = new Thread(st);t1.start();   //开启了线程t1,具备执行资格,不一定有执行权利try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}st.setFlag(false);t2.start();  //t2也具备了执行资格,不一定有执行权利}}class SaleTicket02 implements Runnable{private static int num = 100;private Object obj = new Object();private boolean flag = true;public void setFlag(boolean flag) {this.flag = flag;}public boolean isFlag() {return flag;}@Overridepublic void run() {if (flag) {//while(true){////类名.class   :表示了字节码对象//synchronized (SaleTicket02.class) {//if (num>0) {//try {//Thread.sleep(10);//} catch (InterruptedException e) {//e.printStackTrace();//}//System.out.println(Thread.currentThread().getName()+"......sale..code..."+num--);//}//}//}//}else while(true){while(true){show();//}//}}}}}//提取同步代码块当中的内容,在同步函数中进行封装;//静态方法在加载进入内存时,还没有类的对象呢,但是锁必须是个对象。public static synchronized void show(){if (num>0) {try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"......sale..function..."+num--);}}}

0 0
原创粉丝点击