在不同的线程中启动Java类

drR*_*lol 2 java concurrency

我想知道如何从不同的线程调用一个类,并让所有的调用都在它自己的线程中运行?

假设我有三个线程,并且每个线程都需要调用anotherClass.getBS(),但调用可能同时进行,并且没有理由在当时执行一个.死锁不是问题.

谢谢!

Jon*_*ght 7

如果anotherClass.getBS()确实是线程安全的,你可以从三个线程中的每一个调用它.它将在您调用它的线程内运行.

这是一个很好的例子.下面的代码生成此输出:

$ javac Bar.java
$ java Bar
Thread ID 9 running
Thread ID 10 running
Thread ID 8 running
Doing something on thread 9
Doing something on thread 10
Doing something on thread 8
Thread ID 9 running
Doing something on thread 9
Thread ID 8 running
Doing something on thread 8
Thread ID 10 running
Doing something on thread 10
Run Code Online (Sandbox Code Playgroud)

这是代码:

public class Bar
{

  static private final class MyOtherClass
  {
    public void doSomething()
    {
      System.out.println("Doing something on thread "+Thread.currentThread().getId());
    }
  }

  static private MyOtherClass myOtherClass=new MyOtherClass();

  static private final class MyThreadClass implements Runnable
  {
    public void run()
    {
      while (true)
      {
        try
        {
          Thread.sleep(1000);
        }
        catch (InterruptedException ie)
        {
          System.err.println("Interrupted");
          return;
        }
        System.out.println("Thread ID "+Thread.currentThread().getId()+" running");
        myOtherClass.doSomething();
      }
    }
  }

  static public void main(String[] args)
  {
    Thread t1=new Thread(new MyThreadClass());
    Thread t2=new Thread(new MyThreadClass());
    Thread t3=new Thread(new MyThreadClass());
    t1.start();
    t2.start();
    t3.start();
  }

}
Run Code Online (Sandbox Code Playgroud)