在Java中交换两个线程不按顺序进行

时间:2018-03-16 16:45:48

标签: java multithreading

我想检查两个或多个访问共享资源而没有互斥的线程是否会出现交错问题,我注意到如果我在条件中增加数量,那么从50我放1000,我注意到线程不再运行第一个然后另一个,但重叠,为什么?我该如何解决这个问题? 这是代码

import java.util.*;
import java.lang.*;
import java.io.*;

class Mutex {

  private int val;
  public Mutex(int val) {

    this.val=val;
  }

  public int getVal() {
    return val;
  }

  public void printVal() {
    int i=0;
    while (true) {

     System.out.println(Thread.currentThread().getName()+" "+this.getVal());
      if(i==50)
        break;
      else
        i++;
    }
  }

  public static void main(String args[]) {
    final Mutex m1=new Mutex(1);
    final Mutex m2 = new Mutex(2);
    new Thread(new Runnable() {
      @Override
      public void run() {
        m1.printVal();
      }
    },"THREAD-1").start();
    new Thread(new Runnable() {
      @Override
      public void run() {
        m2.printVal();
      }
    },"THREAD-2").start();
  }
}

2 个答案:

答案 0 :(得分:0)

你启动THREAD-1,然后启动THREAD-2。当任务很短(EG停在50)时,THREAD-1在你开始THREAD-2之前运行完成。当任务较长时,则两个线程可能重叠

答案 1 :(得分:0)

您的代码有些变化。请转到主要方法

const firstname = document.getElementById("firstname");
const rsvpcta = document.querySelector("a[href*='#RSVPForm']");
rsvpcta.addEventListener("click", () => {firstname.focus();})