繁体   English   中英

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

[英]How to Restore Thread from Blocked to Runnable State?

内容:

我正在编写一个小型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状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM