我对synchronized关键字的用法和重要性有一些疑问.
synchronized关键字有什么意义?synchronized?我是否可以获得一个完整的简单场景,即教程,建议如何使用它,特别是使用队列?
我试图通过使用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) 在我的应用程序中,我正在使用运行批处理文件的代码,在执行它时我收到一个异常,即当前线程不是所有者。这里要提一下,我的应用是基于eclipse插件开发的。以下是我的代码,请查看并找出问题以帮助我..
/*.......any code.........*/
try
{
Runtime runtime = Runtime.getRuntime();
String cmd = new String(C:\\abc.bat);
process = runtime.exec("\"" + cmd + "\"");
process.wait();
}
catch (Exception e)
{
e.printStackTrace();
}
/***********any code**************/
Run Code Online (Sandbox Code Playgroud) 我还没有工作multithreading,加入和等待有什么区别,通知方法?差异仅限于获取lock和禁止其他人threads访问它或是否有其他用例?
为什么我应该去wait和notify在multithreading何时join可用于完成thread执行?
如果提供了任何实时示例,将会很有帮助