您的位置:首页 > 其它

多线程初探(六)

2016-01-19 14:39 239 查看
package com.liujunhua.it01;
/**
* 毕老师这一节的视频看了三遍,愣是没怎么看懂,待后续进一步分析-_-";
*
* 如果同步函数被静态修饰后,使用的锁是什么呢?
* 通过验证,发现不是this了,因为静态方法中不含有this
*
* 静态进内存时,内存中没有本类对象,但是一定有该类对应的字节码文件对象。
* 类名.class  该对象类型是class
*
* 静态的同步方法,使用的是该方法所在类的字节码文件对象。类名.class
*/
public class Demo01 {

public static void main(String[] args) {

Ticket ticket = new Ticket();
Thread t1 = new Thread(ticket);
Thread t2 = new Thread(ticket);

t1.start();
t2.start();
}
}

class Ticket implements Runnable {

private static int tick = 400;
Object obj = new Object();
boolean flag = true;

@Override
public void run() {
// TODO Auto-generated method stub
if (flag) {

while (true) {
/**************************************************************************/
synchronized (Ticket.class) {//这里修改后和静态方法用的是同一把锁

if (tick > 0) {
try {
Thread.sleep(10);
} catch (Exception e) {
// TODO: handle exception
}
System.out.println(Thread.currentThread().getName()
+ "######" + tick--);
}
}
}
}else {
while (true) {
show();
}
}
}
/***************************************************************************************/
public static synchronized void show(){
if (tick > 0) {

try {
Thread.sleep(10);
} catch (Exception e) {
// TODO: handle exception
}

System.out.println(Thread.currentThread().getName()+"...code:"+tick--);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: