java多线程捡球案例
时间: 2024-06-13 15:01:44 浏览: 178
java多线程例子
Java多线程捡球案例是一个经典的多线程案例。场景是有两个人在捡球,他们分别会抛球和接球,如果有球可以接到则接住,否则继续等待。这个案例可以用来演示多线程的协作和同步。
以下是捡球案例的Java代码:
```
public class CatchBall {
public static void main(String[] args) {
Ball ball = new Ball();
Thrower thrower = new Thrower(ball);
Catcher catcher = new Catcher(ball);
thrower.start();
catcher.start();
}
}
class Ball {
private boolean hasBall = false;
public synchronized void throwBall() {
while(hasBall) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Throw the ball.");
hasBall = true;
notifyAll();
}
public synchronized void catchBall() {
while(!hasBall) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Catch the ball.");
hasBall = false;
notifyAll();
}
}
class Thrower extends Thread {
private Ball ball;
public Thrower(Ball ball) {
this.ball = ball;
}
public void run() {
for(int i = 0; i < 10; i++) {
ball.throwBall();
}
}
}
class Catcher extends Thread {
private Ball ball;
public Catcher(Ball ball) {
this.ball = ball;
}
public void run() {
for(int i = 0; i < 10; i++) {
ball.catchBall();
}
}
}
```
以上代码中,Ball类表示球,其中throwBall()方法表示抛球,catchBall()方法表示接球。Thrower和Catcher类分别表示抛球和接球的人。
在Ball类中,使用了synchronized关键字来保证了throwBall()和catchBall()方法的同步执行。当有球可以接住时,使用notifyAll()方法通知所有等待的线程。当没有球可接住时,使用wait()方法使当前线程等待,直到有新的球抛出来。
在Thrower和Catcher类中,分别调用了ball.throwBall()和ball.catchBall()方法,来实现抛球和接球的动作。
阅读全文