我试图通过使用wait()和notify()访问共享资源或依赖其状态来理解实现线程的必要性.
我看到的想法是监视对象并等待它们的可用性并在使用后释放它们以使它们可用于其他线程/方法,但为什么这些方法是必要的而不是仅仅将相关对象声明为静态volatile以便其他线程在不调用这些方法的情况下了解状态的变化?
例如
在一家餐厅,有2名厨师.其中一位厨师是一位优秀的厨师(更好的烹饪品质,......)并带有布尔值isGoodCook = true,而第二位厨师则是一名厨师并带有布尔值isGoodCook = false.
一个厨师只有一次可以做饭的设备.糟糕的厨师会在特定的时间内做饭(=烹饪时间),而优秀的厨师偶尔会来厨房来接管糟糕的厨师做饭的任务.这位优秀的厨师在他的烹饪过程中永远不会被打断,并且一旦开始他就会为他的整个烹饪时间做饭.
(坏厨师停止烹饪,只要好厨师做饭的一部分(=烹饪时间的好厨师)).
在好厨师停止做饭之后,坏厨师必须再次进行准备饭菜的任务.
private boolean cooking; //is equipment used at the moment
private boolean isGoodCook;
private boolean cookingDesire; //indicating to chef to stop cooking
private int cookingTime;
public CookingTask(boolean isGoodCook, int cookingTime)
{
this.isGoodCook = isGoodCook;
this.cookingTime = cookingTime;
}
public void run()
{
if(isGoodCook)
{
//notify actual cook to stop cooking
cookingDesire = true;
}
//wait til equipment to cook
//is …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的例子,但我只是在学习,找不到以下解决方案:
给定 2 个序列,是
<emp>10</emp>
<emp>42</emp>
<emp>100</emp>
Run Code Online (Sandbox Code Playgroud)
和另一个序列
<emp>10</emp>
<emp>42</emp>
Run Code Online (Sandbox Code Playgroud)
我想要做的是:比较序列并返回在第一个序列中但不在第二个序列中的序列部分,<emp>100</emp>在这种情况下。
我正在考虑“除外”操作,但无法弄清楚如何使其工作。
非常感谢帮助。