java - java中的线程/同步

标签 java concurrency

我对 Java 非常失望,因为它不允许以下代码尽可能地并发移动。当没有同步时,两个线程会更频繁地切换,但是当尝试访问同步方法时,在第二个线程获得锁之前以及在第一个线程获得锁之前再次花费太长时间(比如 30 秒)从第二个。什么编码可以更好地处理共享锁:

   public synchronized static void i()
   {

     System.out.println(Thread.currentThread().getName());

    }
    public static void main(String[] f)
   {

   Thread t = new Thread(new Runnable(){
    public void run()
   {
       while(true)
       i();
     }});
    t.setName("a: ");
    Thread t2 = new Thread(new Runnable(){
     public void run()
     {
       while(true)
        i();
      }});
      t2.setName("b: ");
      t.start();
      t2.start();

    }

最佳答案

使用 ReentrantLock 并将公平设置为 true。

public static final ReentrantLock lock = new ReentrantLock(true);
public static void i()
{
    lock.lock();
    try {
        System.out.println(Thread.currentThread().getName());

    } finally {
        lock.unlock();
    }
}

关于java - java中的线程/同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9552546/

相关文章:

Java ExecutorService : awaitTermination of all recursively created tasks

java - 有没有办法让 javaFX 图表中的特定数据始终具有相同的颜色?

java - 我的单独方法不断返回错误的值

java - 如何使用 playframework/jpa 执行批量删除?

java - 列出 servlet 中的 ConcurrentModificationException

java - 并行实现这一点的最有效方法是什么?

java - 如何编译JUnit测试类?

java - Jersery1.x、Guice 和 Tomcat 的问题

multithreading - 所有go routines are sleeve deadlock

concurrency - 这个webapp代码需要同步吗?