کلاس Thread در جاوا متدی با نام stop دارد که deprecate شده است و نباید از آن استفاده کرد. دلیل deprecate شدن این متد خیلی مفصل است که می توانید در این لینک مطالعه کنید.
حال راه حل جایگزین چیست:
1- استفاده از یک فیلد flag از نوع volatile:
public final class Container implements Runnable {
private final Vector<Integer> vector = new Vector<Integer>(1000);
private volatile boolean done = false;
public Vector<Integer> getVector() {
return vector;
}
public void shutdown() {
done = true;
}
@Override public synchronized void run() {
Random number = new Random(123L);
int i = vector.capacity();
while (!done && i > 0) {
vector.add(number.nextInt(100));
i--;
}
}
public static void main(String[] args) throws InterruptedException {
Container container = new Container();
Thread thread = new Thread(container);
thread.start();
Thread.sleep(5000);
container.shutdown();
}
}
2- استفاده از متد interrupt از کلاس Thread:
public final class Container implements Runnable {
private final Vector<Integer> vector = new Vector<Integer>(1000);
public Vector<Integer> getVector() {
return vector;
}
@Override public synchronized void run() {
Random number = new Random(123L);
int i = vector.capacity();
while (!Thread.interrupted() && i > 0) {
vector.add(number.nextInt(100));
i--;
}
}
public static void main(String[] args) throws InterruptedException {
Container c = new Container();
Thread thread = new Thread(c);
thread.start();
Thread.sleep(5000);
thread.interrupt();
}
}