Java 同步方法赢得';不要在线程内工作
我正在试用一个带有线程的简单程序,它可以很好地与以下三类配合使用:Java 同步方法赢得';不要在线程内工作,java,multithreading,Java,Multithreading,我正在试用一个带有线程的简单程序,它可以很好地与以下三类配合使用: public class Waiting { public static void main(String[] args) { Game game = new Game(); for (int i = 0; i <= 1; i++) { new Thread(new Player(game, i)).start(); } } } 但是
public class Waiting {
public static void main(String[] args) {
Game game = new Game();
for (int i = 0; i <= 1; i++) {
new Thread(new Player(game, i)).start();
}
}
}
但是,当我删除Game类并在Player类中编写方法“waiting”和“finished”时,“waiting”方法不知何故被忽略了
如何在Player类中运行这些方法?wait()
释放锁,允许其他线程进入synchronized
方法
此方法导致当前线程(此处称为T)将自身置于此对象的等待集中,然后放弃此对象上的任何和所有同步声明
public class Player implements Runnable {
private Game game;
private int number;
boolean plays = false;
public Player(Game game, int number) {
this.game = game;
this.number = number + 1;
}
@Override
public void run() {
while (true) {
System.out.println("starts number: " + number);
considering(number);
game.waiting(number);
playing(number);
game.finished(number);
}
}
public void considering(int number) {
try {
System.out.println("player " + number + " considering");
Thread.sleep((int) (Math.random() * 20000));
} catch (Exception e) {
}
}
public void playing(int number) {
try {
System.out.println("player " + number + " plays");
Thread.sleep((int) (Math.random() * 20000));
} catch (Exception e) {
}
}
}
public class Game {
boolean plays = false;
public Game() {
}
public synchronized void waiting(int number) {
while (plays) {
try {
System.out.println("player " + number + " waiting");
wait();
} catch (Exception e) {
}
}
plays = true;
}
public synchronized void finished(int number) {
System.out.println("player " + number + " finished");
plays = false;
notify();
System.out.println("----");
}
}