Java中的多线程

时间:2014-04-25 17:48:23

标签: java multithreading

当我在java中有一个synchronized方法时,如果有多个线程(比如10个线程)试图访问这个方法,并假设某个线程可以访问这个方法并完成方法的执行并释放锁定那么剩下的9个线程可以访问这个方法吗?是否有任何标准机制可以从池中选择下一个线程,或者是按FIFO顺序选择它还是随机选择线程?

2 个答案:

答案 0 :(得分:8)

Java中的线程调度是特定于平台的。在同步方案中,无法保证线程执行的顺序。

话虽如此,程序大致如下:

  1. 采用抢占式调度算法
  2. 每个线程都获得JVM的优先级编号
  3. 选择优先级最高的主题
  4. 在具有相同优先级的线程之间遵循FIFO排序
  5. JVM运行具有最高优先级的线程。也可以通过setPriority()类的Thread方法以编程方式设置优先级。

答案 1 :(得分:3)

下一个线程将基本上随机选择,并且用于选择下一个线程的算法在不同的机器上可能是不同的。这是Java获得使用本机线程的效率所必需的。

如果您需要先进先出行为,则可能需要使用java.util.concurrent包中的某些内容,例如将公平性设置为true的Semaphore类。