【问题标题】:Issue with multithreading in javajava中的多线程问题
【发布时间】:2014-06-20 16:47:02
【问题描述】:

我在 Thread 中遇到问题。这是我的代码

private void CustomBrightActionPerformed(java.awt.event.ActionEvent evt) {
    creed = new Thread() {
        public void run() {
            final JFrame jfmae = new JFrame("Set BrightNess");
            JLabel jla = new JLabel("!@#$");

            jfmae.add(jla, BorderLayout.CENTER);
            jfmae.setSize(180, 180);

            jfmae.addMouseListener(new Mymos());
            jfmae.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent windowEvent) {
                    jfmae.dispose();
                }
            });
            jfmae.setVisible(true);
        }
    };
    creed.start();
}

class Mymos extends MouseAdapter {
    public void mousePressed(java.awt.event.MouseEvent evt) {
        try {
            creed.sleep(3000);
        } catch (InterruptedException e) {

        }
        Bigh2MousePressed(evt);
    }

    private void Bigh2MousePressed(java.awt.event.MouseEvent evt) {
        System.out.println("dsds");
    }
}




   

CustomBrightActionPerformed

是另一个处理动作事件的类的方法,Mymos 是内部类。问题是我正在睡觉creed Thread,但我的主线程也睡了 3 秒。为什么?

【问题讨论】:

    标签: java multithreading swing thread-sleep


    【解决方案1】:

    你正在主线程上调用sleep()

    sleep()static 方法,您只是使用它的线程的实例(信条)来调用它,这是不鼓励的,它会休眠调用此方法的 Thread

    如果要暂停 creed 线程,则需要从其 run() 方法执行 Thread.sleep()

    【讨论】:

    • 一个问题。如果我在 Bigh2MousePressed 中执行一些操作并且如果有一些延迟,那么它是否也会暂停主线程执行?
    • 如果是在同一个线程上调用,那么是的,如果是在新线程中异步调用,那么它会立即返回主线程并在另一个线程上执行操作
    • 我尝试了 creed 的 run 方法中的 Thread.sleep() ,但它仍然在暂停主线程
    • 你删除了对creed.sleep(3000);的调用吗?
    • 该死的我没有。对不起。
    猜你喜欢
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 2016-12-12
    • 2011-09-11
    相关资源
    最近更新 更多