JAVA里代码同步执行 java 同步( 三 )


Java 如何同步顺序执行多个线程这个要分段来实现,第一步是让线程同步 , 第二部是让线程有顺序 。
同步:我们可以用synchronized来解决 。
Java线程同步原理: java会为每个object对象分配一个monitor,当某个对象的同步方法(synchronized methods )被多个线程调用时,该对象的monitor将负责处理这些访问的并发独占要求 。
当一个线程调用一个对象的同步方法时,JVM会检查该对象的monitor 。如果monitor没有被占用,那么这个线程就得到了monitor的占有权,可以继续执行该对象的同步方法;如果monitor被其他线程所占用,那么该线程将被挂起,直到monitor被释放 。
当线程退出同步方法调用时,该线程会释放monitor,这将允许其他等待的线程获得monitor以使对同步方法的调用执行下去 。就像下面这样:
public void test() {
synchronized (this) {
//做一些事
//这里只会有一个线程来调用该方法 , 因为只有一个this对象作为资源分配给该线程
}
}
顺序:我们可以用List来解决,因为它是有序的 。我们只需要将要执行的线程放入到List中
上代码:
/**
* 让多个线程同步顺序执行的线程管理器
* @author bianrx
* @date 2012.1.18
* SynchronizedRunMultiThread
*/
public class SyncManager {
/**
* 待执行的线程集合,注意这里必须是Runnable接口类型 , 下面会解释
*/
private ListRunnable runnableList;
public SyncManager(){}
public SyncManager(ListRunnable runnableList) {
this.runnableList = runnableList;
}
public void setRunnable(ListRunnable runnableList) {
this.runnableList = runnableList;
}
public void run() {
//遍历代执行的线程集合
for(Runnable runnable: runnableList) {
runThread(runnable);
}
}
/**
* 按顺序同步执行多个线程
* @author bianrx
* @date 2012.1.18
* @param runnable
*/
private void runThread(Runnable runnable) {
synchronized (this) {
runnable.run();//这里需要注意的是:必须调用run方法 , 因为如果你调用了start方法,线程只会向JVM请求资源 , 但是未必就执行其中的run 。
//这个方法是同步的,所以当前只有一个线程占用了this对象 。
}
}
}
java多线程调用同步方法时,休眠后代码为什么执行不到1、java多线程调用同步方法时主程序或者后台服务Service程序两者必须有一个正在运行着 , 定时任务才会执行 。
2、自动执行的任务可以设置开启或关闭定时,检查任务的这一开关处于开启状态 。
3、源目录在定时的时间点如果没有变化,任务执行后不会留下日志,通过查看任务的最后执行时间确定任务到底执行了没有 。
4、执行失败和没有执行不是同一回事,如果是执行失败则要分析失败原因 。这是java多线程调用同步方法时,休眠后代码执行不到的原因 。
JAVA里代码同步执行的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 同步、JAVA里代码同步执行的信息别忘了在本站进行查找喔 。

推荐阅读