1.synchronized加在普通方法上相当于把该方法放在同步代码块synchronized(this)中。
public class sellticket implements Runnable{
private static int tickets=100;
private static int x=0;
public synchronized void sellTicket() {
while (true){
if (tickets >0) {
x++;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":正在销售第" + tickets + "张票");
tickets--;
}
}
}
@Override
public void run() {
//使用这种方式,普通方法不会被锁住
// sellticket s = new sellticket();
// s.sellTicket();
sellTicket();
}
public static void main(String[] args) {
//普通方法被锁住
// sellticket s = new sellticket();
// Thread t1 = new Thread(s);
// Thread t2 = new Thread(s);
// t1.start();
// t2.start();
//普通方法没被锁住
sellticket s = new sellticket();
sellticket s1 = new sellticket();
Thread t1 = new Thread(s);
Thread t2 = new Thread(s1);
t1.start();
t2.start();
}
}
2.synchronized加在静态方法上相当于把该方法放在同步代码块synchronized(类名.class)中。
public class sellticket implements Runnable{
private static int tickets=100;
private static int x=0;
private static synchronized void sellTicket1() {
while (true) {
if (tickets >0) {
x++;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":正在销售第" + tickets + "张票");
tickets--;
}
}
}
@Override
public void run() {
//使用这个方式,普通方法不会被锁住
// sellticket s = new sellticket();
// s.sellTicket();
// sellTicket();
sellTicket1();
}
public static void main(String[] args) {
//普通方法被锁住
//静态方法被锁住
sellticket s = new sellticket();
Thread t1 = new Thread(s);
Thread t2 = new Thread(s);
t1.start();
t2.start();
//普通方法没被锁住
//静态方法被锁住
// sellticket s = new sellticket();
// sellticket s1 = new sellticket();
// Thread t1 = new Thread(s);
// Thread t2 = new Thread(s1);
// t1.start();
// t2.start();
}
}

被折叠的 条评论
为什么被折叠?



