如何将线程从阻塞状态恢复到可运行状态?



上下文:

我正在编写一个小型Java程序来欺骗我的朋友。该程序在运行时会向屏幕发送许多小窗口的垃圾邮件,以阻止视图并使机器滞后。为了提高窗口出现的速度,我尝试创建多个线程,每个线程都会在屏幕上发送垃圾邮件窗口。

问题和问题:

当我得到每个线程的状态时,只有一个线程是可运行的,其余的都被阻止,导致窗口垃圾邮件率没有增加。如何防止这些线程被阻塞?


-法典-


主类- 创建线程并在 1 秒后打印其状态

public class Init {
public static void main(String[] args) throws InterruptedException {
ArrayList<Thread> list = new ArrayList();
for(int i = 0; i < 4; i++) {
Thread t = new Thread(new MyThread());
t.start();
list.add(t);
}
//Print each Thread's name and state after 1 second
Thread.sleep(1000);
for(Thread t : list) {
System.out.println(t.getName() + " " + t.getState());
}
}
}

线程状态输出

Thread-0 BLOCKED
Thread-1 BLOCKED
Thread-2 BLOCKED
Thread-3 RUNNABLE

垃圾邮件类- 无限创建新窗口并将它们放置在屏幕上的随机位置

public class Spam {
JFrame window;
Random r;
Dimension screenSize;
int x;
int y;
public Spam() {
screenSize = Toolkit.getDefaultToolkit().getScreenSize();
r = new Random();
while(true) {
x = r.nextInt((int)screenSize.getWidth());
y = r.nextInt((int)screenSize.getHeight());
x -= 100;
y -= 100;
window = new JFrame();
window.setSize(100, 100);
window.setLocation(x,  y);
window.setBackground(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256))); //set window to random color
window.setVisible(true);
}
}
}

线程类- 每个实例实例化一个垃圾邮件类

public class MyThread implements Runnable {
@Override
public void run() {
try {
new Spam();
}
catch(Exception e) {
System.out.println(e);
}
}
}

Thread.BLOCKED

。一个线程 处于阻止状态正在等待监视器锁定进入 同步块/方法或之后重新输入同步块/方法 呼叫Object.wait.

因此,一旦线程处于WAITING状态(等待监视器锁定),就会进入BLOCK状态,一旦它获取监视器,它就会进入RUNNABLE状态。

最新更新