本帖最后由 胡建伟 于 2014-3-29 19:17 编辑
- class Ticket implements Runnable {
- private static int ticket = 200;//将ticket也改为静态,在方法区中存在
- //Object obj = new Object();
- public void run() {
- while(true) {
- //this.show();//默认前面有this,系统会自己加上
- Ticket.show();
- }
- }
- //注意:同步函数不能把while(true){}也包含在内,否则,死循环,只有一个进程在里面,一直ture执行下去
- public static synchronized void show() {
- if(ticket>0) {
- try {
- Thread.sleep(10);
- } catch (Exception e) {}
- System.out.println(Thread.currentThread().getName()+"...sale:"+ticket--);
- }
- }
- }
- public class SalesTicket {
- public static void main(String[] args) {
- Ticket t = new Ticket();
- Thread t1 = new Thread(t);//创建一个线程,将t做为参数传递给Thread
- Thread t2 = new Thread(t);
- Thread t3 = new Thread(t);
- t1.start();
- t2.start();
- t3.start();
- }
- }
复制代码
毕向东-Java基础视频-多线程-静态同步函数的锁是class对象,视频里将同步函数被静态修饰后,他的锁就不在是this了,而是类名.class,那为什么所将例子中只是在同步代码块对象用到了锁,show()方法却依然是默认的this啊???
|