第二种正确的代码,可以进一步理解synchronized限定符:
package thread_1;
class SaleTickets implements Runnable{
private static int num = 100;
static String str = new String("hello");
public void run(){
while (true)
{
synchronized(str)//锁定的要是同一个对象,因此要对String进行限定
{
if (num>0){
System.out.printf("%s线程正在卖第%d张票\n",Thread.currentThread().getName(),num--);
}
else
break;
}
}
}
}
public class testTickets {
public static void main(String[] args){
SaleTickets aa1 = new SaleTickets();
Thread t1 = new Thread(aa1);
t1.start();
t1.setPriority(1);
SaleTickets aa2 = new SaleTickets();
Thread t2 = new Thread(aa2);//为什么可以同时调用两个相同的aa1对象,这是Thread()类已经实现好的。可以直接这样的使用
//而且这样更符合逻辑的认知。
t2.start();
}
}