黑马程序员技术交流社区
标题:
多线程安全问题解决总结
[打印本页]
作者:
122125241
时间:
2015-7-3 21:18
标题:
多线程安全问题解决总结
package cn.itcast_11;
/*
* A:同步代码块的锁对象是谁呢?
* 任意对象。
*
* B:同步方法的格式及锁对象问题?
* 格式:把同步关键字加在方法上。
*
* 同步方法锁对象是谁呢?
* 默认this
*
* C:静态方法及锁对象问题?
* 静态方法的锁对象是谁呢?
默认当前类的Class文件
* 类的字节码文件对象。(反射会讲)
public class SellTicket implements Runnable {
// 定义100张票
private static int tickets = 100;
// 定义同一把锁
private Object obj = new Object();
private Demo d = new Demo();
private int x = 0;
@Override
public void run() {
while (true) {
if(x%2==0){
synchronized (obj) {
if (tickets > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()
+ "正在出售第" + (tickets--) + "张票 ");
}
}
}else {
sellTicket();//默认的对象时this
}
x++;
}
}
//如果一个方法一进去就看到了代码被同步了,那么我就把这个同步加在方法上
private static synchronized void sellTicket() {
if (tickets > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()
+ "正在出售第" + (tickets--) + "张票 ");
}
}
}
复制代码
作者:
十五号的人生
时间:
2015-7-3 21:31
菜鸟飘过
作者:
122125241
时间:
2015-7-3 21:33
十五号的人生 发表于 2015-7-3 21:31
菜鸟飘过
坚持到无能为力,努力到感动自己
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2