在某些情况下,计数器为负值。为什么?如何解决这个问题? 打包threadapps; 公共类线程扩展了javax.realtime.RealtimeThread{ /** *@param指定命令行参数 */ 静态可变布尔停止=false; 公共静态void main(字符串[]args)引发InterruptedException{ //此处的TODO代码应用程序逻辑 // 线程a=新线程(); 线程b=新线程(); //设置线程的优先级 a、 设置优先级(4); b、 设置优先级(6); //运行线程 a、 start(); b、 start(); //睡眠线程 睡眠(5000); 停止=真; } @凌驾 公开募捐{ //用于循环计数到10 //对于(int i=0;i

在某些情况下,计数器为负值。为什么?如何解决这个问题? 打包threadapps; 公共类线程扩展了javax.realtime.RealtimeThread{ /** *@param指定命令行参数 */ 静态可变布尔停止=false; 公共静态void main(字符串[]args)引发InterruptedException{ //此处的TODO代码应用程序逻辑 // 线程a=新线程(); 线程b=新线程(); //设置线程的优先级 a、 设置优先级(4); b、 设置优先级(6); //运行线程 a、 start(); b、 start(); //睡眠线程 睡眠(5000); 停止=真; } @凌驾 公开募捐{ //用于循环计数到10 //对于(int i=0;i,java,concurrency,Java,Concurrency,请尝试以下代码: package threadapps; public class Threads extends javax.realtime.RealtimeThread{ /** * @param args the command line arguments */ static volatile boolean stop = false; public static void main(String[] args) throws Inte

请尝试以下代码:

package threadapps;

public class Threads extends javax.realtime.RealtimeThread{

    /**
     * @param args the command line arguments
     */
    static volatile  boolean stop = false;
    public static void main(String[] args) throws InterruptedException {

        // TODO code application logic here
        //
        Thread a = new Threads();
        Thread b = new Threads();
        //set priority for threads
        a.setPriority(4);
        b.setPriority(6);
        //run threads
        a.start();
        b.start();
        //Sleep Thread
        Threads.sleep(5000);
        stop = true;
    }

    @Override
    public void run(){
        // for loop for counting to 10
        //for(int i = 0; i<10;i++){
        //    System.out.println( Thread.currentThread().getName()+" The Counter Is "+i);
        //}    
        int count = 0;
        for(;!stop;)
            count++;
        System.out.println(Thread.currentThread().getName()+" The Count is "+count);
    }
}
一旦你达到一个整数所能容纳的最大值,你回到
Integer.MIN\u value
并从那里开始递增。所以我猜在你的代码中
count
只是上升到
Integer.max\u value
,然后继续运行(因为它运行了5秒),最后是负数

如果要保留较大的值,请使用
long

尝试以下代码:

package threadapps;

public class Threads extends javax.realtime.RealtimeThread{

    /**
     * @param args the command line arguments
     */
    static volatile  boolean stop = false;
    public static void main(String[] args) throws InterruptedException {

        // TODO code application logic here
        //
        Thread a = new Threads();
        Thread b = new Threads();
        //set priority for threads
        a.setPriority(4);
        b.setPriority(6);
        //run threads
        a.start();
        b.start();
        //Sleep Thread
        Threads.sleep(5000);
        stop = true;
    }

    @Override
    public void run(){
        // for loop for counting to 10
        //for(int i = 0; i<10;i++){
        //    System.out.println( Thread.currentThread().getName()+" The Counter Is "+i);
        //}    
        int count = 0;
        for(;!stop;)
            count++;
        System.out.println(Thread.currentThread().getName()+" The Count is "+count);
    }
}
一旦你达到一个整数所能容纳的最大值,你回到
Integer.MIN\u value
并从那里开始递增。所以我猜在你的代码中
count
只是上升到
Integer.max\u value
,然后继续运行(因为它运行了5秒),最后是负数

如果要保留较大的值,请使用
long

尝试以下代码:

package threadapps;

public class Threads extends javax.realtime.RealtimeThread{

    /**
     * @param args the command line arguments
     */
    static volatile  boolean stop = false;
    public static void main(String[] args) throws InterruptedException {

        // TODO code application logic here
        //
        Thread a = new Threads();
        Thread b = new Threads();
        //set priority for threads
        a.setPriority(4);
        b.setPriority(6);
        //run threads
        a.start();
        b.start();
        //Sleep Thread
        Threads.sleep(5000);
        stop = true;
    }

    @Override
    public void run(){
        // for loop for counting to 10
        //for(int i = 0; i<10;i++){
        //    System.out.println( Thread.currentThread().getName()+" The Counter Is "+i);
        //}    
        int count = 0;
        for(;!stop;)
            count++;
        System.out.println(Thread.currentThread().getName()+" The Count is "+count);
    }
}
一旦你达到一个整数所能容纳的最大值,你回到
Integer.MIN\u value
并从那里开始递增。所以我猜在你的代码中
count
只是上升到
Integer.max\u value
,然后继续运行(因为它运行了5秒),最后是负数

如果要保留较大的值,请使用
long

尝试以下代码:

package threadapps;

public class Threads extends javax.realtime.RealtimeThread{

    /**
     * @param args the command line arguments
     */
    static volatile  boolean stop = false;
    public static void main(String[] args) throws InterruptedException {

        // TODO code application logic here
        //
        Thread a = new Threads();
        Thread b = new Threads();
        //set priority for threads
        a.setPriority(4);
        b.setPriority(6);
        //run threads
        a.start();
        b.start();
        //Sleep Thread
        Threads.sleep(5000);
        stop = true;
    }

    @Override
    public void run(){
        // for loop for counting to 10
        //for(int i = 0; i<10;i++){
        //    System.out.println( Thread.currentThread().getName()+" The Counter Is "+i);
        //}    
        int count = 0;
        for(;!stop;)
            count++;
        System.out.println(Thread.currentThread().getName()+" The Count is "+count);
    }
}
一旦你达到一个整数所能容纳的最大值,你回到
Integer.MIN\u value
并从那里开始递增。所以我猜在你的代码中
count
只是上升到
Integer.max\u value
,然后继续运行(因为它运行了5秒),最后是负数


如果要保存较大的值,请使用
long
如果count将达到Integer.MAX\u值,则在下一个增量时,它将是Integer.MIN\u值。

如果count将达到Integer.MAX\u值,则在下一个增量时,它将是Integer.MIN\u值。

如果count将达到Integer.MAX\u值,则在下一个增量时增量时,它将是整数.MIN\u值。

如果计数将达到整数.MAX\u值,则在下一个增量时,它将是整数.MIN\u值。

这是因为二进制计算

参见字节示例

int x = Integer.MAX_VALUE;
System.out.println(++x); // prints out -2147483648
int
相同


使用
biginger
而不是
int
,因为它是一个无限字长的-integer

因为它是二进制计算

参见字节示例

int x = Integer.MAX_VALUE;
System.out.println(++x); // prints out -2147483648
int
相同


使用
biginger
而不是
int
,因为它是一个无限字长的-integer

因为它是二进制计算

参见字节示例

int x = Integer.MAX_VALUE;
System.out.println(++x); // prints out -2147483648
int
相同


使用
biginger
而不是
int
,因为它是一个无限字长的-integer

因为它是二进制计算

参见字节示例

int x = Integer.MAX_VALUE;
System.out.println(++x); // prints out -2147483648
int
相同




使用
biginger
而不是
int
,因为它是一个无限字长的-integer

你有什么问题吗?代码甚至不会编译。但你的问题是什么?看在上帝的份上,Java中没有Threads类。不清楚你在问什么。从编写的代码上方复制代码,然后在netbeans中运行它en结果:run:Thread-0计数为-104198536 Thread-1计数为96208540生成成功(总时间:6秒)我的问题是如何解决结果中显示的负值。你有什么问题吗?代码甚至不会编译。但你的问题是什么?看在上帝的份上,Java中没有Threads类。不清楚你在问什么。从编写的代码上方复制代码并在netbeans中运行,结果是:run:Thread-0计数是-104198536 Thread-1计数为96208540构建成功(总时间:6秒)我的问题是如何解决结果中显示的负值。你有什么问题吗?代码甚至不会编译。但你的问题是什么?看在上帝的份上,Java中没有Threads类。不清楚你在问什么。从编写的代码上方复制代码并在netbeans中运行,结果是:run:Thread-0计数是-104198536 Thread-1计数为96208540构建成功(总时间:6秒)我的问题是如何解决结果中显示的负值。你有什么问题吗?代码甚至不会编译。但你的问题是什么?看在上帝的份上,Java中没有Threads类。不清楚你在问什么。从编写的代码上方复制代码并在netbeans中运行,结果是:run:Thread-0计数是-104198536 Thread-1计数为96208540构建成功(总时间:6秒)我的问题是如何解决结果中显示的负值在哪一部分我可以将此代码添加到哪里?不,这只是为了演示为什么会发生这种情况。如果要修复负值,请尝试将
int count
替换为
long count
好的,我会尝试以正确的方式解决。但是为什么它不给我负数呢在结果中,当我将其更改为double?在哪一部分我可以将此代码添加到何处,这只是为了演示为什么会发生这种情况。如果要修复负值,请尝试将
int count
替换为
long count
好,我将尝试以正确的方式解决。但是为什么结果中不给我负数呢