Java的死循环里的代码不执行

死循环里的代码不执行,但是在死循环里加个输出就执行,并且线程也没有退出

package shendi.utils;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
/**
 * -问题 代码原封不动运行,two函数里的死循环感觉像是挂了一样 但是线程没有结束 不执行
 * -但是在循环内加个输出,函数就没有问题,Why?
 */
public class Test extends JFrame implements Runnable {
    private String type;
    private static int i = 0;

    public Test() {
        JButton button = new JButton("i+1");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                i++;
                System.out.println("two函数的死循环就是不会被执行 + i现在是:"+i);
            }
        });
        this.add(button);
        this.setBounds(10, 10,100,100);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setVisible(true);

        new Thread(new Test("1")).start();
        new Thread(new Test("2")).start();
    }
    public Test(String type) {this.type = type;}

    public static void main(String[] args) {
        new Test();
    }
    private void one() {
        while (true) {
//          System.out.println(i);
        }
    }
    private void two() {
        System.out.println("two被调用了,线程 ");
        while (true) {
            if (1 == 2) break;
//          if (i == 0) System.out.println("i=0 two函数");
            if (i > 1) System.out.println("我是活的");
        }
        System.out.println("two挂了");
    }
    public void run() {
        switch (type) {
        case "1":
            one();
            break;
        case "2":
            two();
            break;
        }
    }
}

4个回答

你怎么知道他挂了呢,而且一段代码写成死循环,这是不可以的

不是挂了,好像和线程安全有关,等个懂多线程的

two方法一直在调用的呀,但是你的两个判断都不对呀,都是false(初始1=0,构造器i++,变成了1,在之后就没变过,所以i不会大于1,),所以不会打印,你如果在two方法里面加上i++;就能看到效果,而不是一直死循环还不输出

weixin_39808420
世纪怪咖 回复Hack神帝: 并不是,就是你没进行输出,你的判断条件一直都为false,不会走那个流程
13 天之前 回复
weixin_39808420
世纪怪咖 回复半城风月半城雪: 加上之后i就一直在加,i就会大于1,就会符合条件,就会一直输出“我是活得”
13 天之前 回复
qq_41806966
Hack神帝 回复半城风月半城雪: 大概知道什么问题了,可能是循环里没有用到一些实际的东西(有效的)所以可能被垃圾回收清掉了(应该),解决方法,在线程里加个锁,或者给判断的变量价格volatile(这个最好,不影响代码,并且增加可见性)
13 天之前 回复
wjy407199
半城风月半城雪 回复: 还有就算写上i++也没用
13 天之前 回复
wjy407199
半城风月半城雪 他是点击按钮加到2以上,但是two这个方法没输出,加了输出语句之后,再点击就有了
13 天之前 回复

在two方法中输出 i 看看 i 的数值有没有改变

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问