Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取具有优先级的信号量阻塞线程的方法?_Java_Semaphore_Java.util.concurrent - Fatal编程技术网

Java 获取具有优先级的信号量阻塞线程的方法?

Java 获取具有优先级的信号量阻塞线程的方法?,java,semaphore,java.util.concurrent,Java,Semaphore,Java.util.concurrent,信号量sema=新信号量(1) 创建一个信号量对象和默认初始化,只有一个许可证,当多个线程同时尝试获取许可证时,必须更改只有一个线程可以访问权限,然后其他线程将在外部等待,当第一个线程释放许可证时,然后等待线程有权获得许可证,还是只是第一个到达并等待线程有权获得许可证 谁能帮助我,我将非常感谢: 此类的构造函数可以选择接受公平性参数。当设置为false时,此类不保证线程获取许可的顺序。特别是,可以使用bargging,也就是说,调用acquire()的线程可以在等待的线程之前分配一个许可证-从逻

信号量sema=新信号量(1)

创建一个信号量对象和默认初始化,只有一个许可证,当多个线程同时尝试获取许可证时,必须更改只有一个线程可以访问权限,然后其他线程将在外部等待,当第一个线程释放许可证时,然后等待线程有权获得许可证,还是只是第一个到达并等待线程有权获得许可证 谁能帮助我,我将非常感谢:

此类的构造函数可以选择接受公平性参数。当设置为false时,此类不保证线程获取许可的顺序。特别是,可以使用bargging,也就是说,调用
acquire()
的线程可以在等待的线程之前分配一个许可证-从逻辑上讲,新线程将自己置于等待线程队列的前端。当公平性设置为true时,信号量保证选择调用任何
acquire
方法的线程,以按照调用这些方法的顺序(先进先出;FIFO)获取许可。请注意,FIFO排序必然适用于这些方法中的特定内部执行点。因此,一个线程可以在另一个线程之前调用
acquire
,但在另一个线程之后到达排序点,同样,在从方法返回时也可以这样做。还要注意,untimed
tryAcquire
方法不支持公平性设置,但将接受任何可用的许可

因此,在初始化信号量时,您可以在两种不同的顺序之间进行选择:

  • 如果使用
    新信号量(1,true)
    进行初始化,则当多个线程正在等待时,调用
    acquire()
    的第一个线程将是第一个接收许可证的线程。也就是说,将按照线程请求的顺序向线程提供许可
  • 如果改为使用
    新信号量(1,false)
    新信号量(1)
    初始化,则每当线程调用
    acquire()
    ,它将成为获得许可的第一个线程。也就是说,当许可证可用时,调用
    acquire()
    的最后一个线程将是接收它的第一个线程

对不起,很难理解您的问题。这两个问题大致相当于你的问题吗?“当多个线程正在等待来自
信号量
的许可时,线程将以什么顺序接收它们?”“如何配置像
信号量
这样的东西,以便在多个线程等待许可时为某些线程提供更高的优先级?”@Alden我的意思是,默认情况下,阻塞线程是指信号量是通过优先级获取的?你能理解吗?在这个评论中,我不理解“是信号量”和“是通过优先级获取的”。@Alden当多个线程正在等待来自信号量的许可时,线程将以什么顺序接收它们?