public class ThreadTest3 {
public static void main(String[] args){
Thread t1 = new Ticket3("t1");
Thread t2 = new Ticket3("t2");
Thread t3 = new Ticket3("t3");
t1.start();
t2.start();
t3.start();
}
}
class Ticket3 extends Thread{
private static int NUM = 50;
public Ticket3(String name) {
super.setName(name);
}
public static synchronized void sale(){
try {
Thread.sleep(20);
if(NUM>0){
System.out.println(Thread.currentThread().getName()+"售出:"+(NUM--));
}
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
}
}
@Override
public void run(){
while (true) {
sale();
}
}
}
---------------------------------------------------华丽分割线------------------------------------------------
public class ThreadTest {
public static void main(String[] args){
Ticket ticket = new Ticket();
Thread t1 = new Thread(ticket,"t1");
Thread t2 = new Thread(ticket,"t2");
Thread t3 = new Thread(ticket,"t3");
t1.start();
t2.start();
t3.start();
}
}
class Ticket implements Runnable{
private static int NUM = 50;
@Override
public void run() {
sale();
}
private void sale() {
while (true) {
synchronized(this){
try {
Thread.sleep(20);
if(NUM>0){
System.out.println(Thread.currentThread().getName()+"售出:"+(NUM--));
}else{
System.out.println(Thread.currentThread().getName()+"break");
break;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
本文通过两个Java示例展示了多线程环境下实现资源同步访问的方法。第一个示例使用Thread子类并应用synchronized关键字确保售票操作的同步;第二个示例则通过实现Runnable接口,并在成员方法中使用synchronized关键字来达到相同目的。
1423

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



