同步关键字和竞争条件在java中产生了意外错误 我只是在java中启动线程的基础。同步关键字告诉调度器在线程执行的中间不进行上下文切换。此外,当多个线程试图访问同一资源时,会发生争用情况。考虑到这一点,我创建了一个简单的类来向自己演示这个概念 public class DemoThread{ int i = 1; public void runThreads() { Thread t1 = new Thread(new Runnable () { @Override public void run() { synchronized(this) { i++; System.out.println("Thread 1: " + i); } } }); Thread t2 = new Thread(new Runnable() { @Override public void run() { synchronized(this) { i--; System.out.println("Thread 2: " + i); } } }); for (int k = 0; k <=100; k++) { t1.start(); t2.start(); } } }

同步关键字和竞争条件在java中产生了意外错误 我只是在java中启动线程的基础。同步关键字告诉调度器在线程执行的中间不进行上下文切换。此外,当多个线程试图访问同一资源时,会发生争用情况。考虑到这一点,我创建了一个简单的类来向自己演示这个概念 public class DemoThread{ int i = 1; public void runThreads() { Thread t1 = new Thread(new Runnable () { @Override public void run() { synchronized(this) { i++; System.out.println("Thread 1: " + i); } } }); Thread t2 = new Thread(new Runnable() { @Override public void run() { synchronized(this) { i--; System.out.println("Thread 2: " + i); } } }); for (int k = 0; k <=100; k++) { t1.start(); t2.start(); } } },java,multithreading,concurrency,Java,Multithreading,Concurrency,为什么会这样?类中的start()方法具有以下行: if (threadStatus != 0) throw new IllegalThreadStateException(); threadStatus用于表示给定线程的状态。如果为0,则表示线程尚未启动。上面的代码意味着,如果您试图在已经运行的线程上调用start(),将抛出IllegalThreadStateException 发生特定错误的原因是,您对给定线程多次调用start()方法t1和t2您不能多次启动同

为什么会这样?

类中的
start()
方法具有以下行:

 if (threadStatus != 0)
            throw new IllegalThreadStateException();
threadStatus
用于表示给定
线程的状态。如果为0,则表示
线程
尚未启动。上面的代码意味着,如果您试图在已经运行的
线程上调用
start()
,将抛出
IllegalThreadStateException


发生特定错误的原因是,您对给定线程多次调用
start()
方法
t1
t2

您不能多次启动同一线程。
此代码:

        for (int k = 0; k <=100; k++) {
            t1.start();
            t2.start();
        }

<代码> >(int k=0);k,你的意思是我从T1,T2开始不止一次?这个问题与同步关键字无关。你应该考虑从标题中删除它。“要执行这些线程100次”,如果这个代码有效,它将执行101次。
        for (int k = 0; k <=100; k++) {
            t1.start();
            t2.start();
        }