用java线程实现互斥
我有这个代码,它是互斥算法用java线程实现互斥,java,multithreading,Java,Multithreading,我有这个代码,它是互斥算法 turn = 0 // shared control variable while (turn != i); // CS turn = (turn + 1) % n; 我知道线程是如何工作的,但实际上我在java中使用线程方面有点弱,所以请给我一些建议,帮助我理解如何使用java线程在实际代码中转换它 抱歉,我的英语不好互斥通常是通过将方法标记为已同步来以最简单的形式实现的。通过将对象的方法标记为已同步,一次只能有一个线程执行该对象的方法。拥有该方法的
turn = 0 // shared control variable
while (turn != i);
// CS
turn = (turn + 1) % n;
我知道线程是如何工作的,但实际上我在java中使用线程方面有点弱,所以请给我一些建议,帮助我理解如何使用java线程在实际代码中转换它
抱歉,我的英语不好互斥通常是通过将方法标记为已同步来以最简单的形式实现的。通过将对象的方法标记为已同步,一次只能有一个线程执行该对象的方法。拥有该方法的对象是监视器 此外,您可以在代码本身中定义一个同步块,将对象传递给它作为监视器 我相信,通过定义一个具有所需逻辑的可运行对象,您可以以一种更简单的方式实现同样的目标。在需要互斥的地方,定义一个同步方法 然后,可以将该可运行实例传递给所需的任意多个线程。由于它们都引用相同的Runnable,对synchronized方法的调用将是互斥的
这不是唯一的方法,但它应该是你所追求的。希望这有帮助。互斥通常是通过将方法标记为已同步来实现的,以最简单的形式。通过将对象的方法标记为已同步,一次只能有一个线程执行该对象的方法。拥有该方法的对象是监视器 此外,您可以在代码本身中定义一个同步块,将对象传递给它作为监视器 我相信,通过定义一个具有所需逻辑的可运行对象,您可以以一种更简单的方式实现同样的目标。在需要互斥的地方,定义一个同步方法 然后,可以将该可运行实例传递给所需的任意多个线程。由于它们都引用相同的Runnable,对synchronized方法的调用将是互斥的
这不是唯一的方法,但它应该是你所追求的。希望这有帮助。 这个代码不是互斥的,考虑这个执行-< /p>
这个代码不是互斥的,考虑这个执行-< /p>
对不起,我现在不能。请参考或抱歉,我现在不能。请参考,或者你的问题是什么?@RalfH好的,但那个问题已经回答了。你的问题是什么?你的问题是什么?@RalfH好的,但这个问题已经得到了回答。你的问题是什么?