最近看了Jfinal 一致对model的那个static final dao有些疑惑,全局一个实例安全吗?同时也出了一个疑惑,静态方法执行会有并发影响吗?看代码

StaticThread.java

public class StaticThread implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
StaticAction.print();
} public static void main(String[] args) {
for (int i = 0; i < 2; i++) {
new Thread(new StaticThread()).start();
}
}
}

StaticAction.java

public class StaticAction {

public static void print() {
int sum = 0;
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+ " step " + i + " is running.");
sum += i;
}
System.out.println("sum is " + sum);
}
}

执行结果如下,可以猜猜:1.sum是多少?2.执行过程是什么样子的?

Thread-0 step 0 is running.
Thread-1 step 0 is running.
Thread-1 step 1 is running.
Thread-1 step 2 is running.
Thread-1 step 3 is running.
Thread-0 step 1 is running.
Thread-1 step 4 is running.
Thread-0 step 2 is running.
Thread-1 step 5 is running.
Thread-0 step 3 is running.
Thread-0 step 4 is running.
Thread-0 step 5 is running.
Thread-0 step 6 is running.
Thread-0 step 7 is running.
Thread-0 step 8 is running.
Thread-0 step 9 is running.
sum is 45
Thread-1 step 6 is running.
Thread-1 step 7 is running.
Thread-1 step 8 is running.
Thread-1 step 9 is running.
sum is 45

看过结果之后,你会发现静态方法执行过程是随着线程的切换而交叉执行的【一会执行下Thread1 一会执行下Thread0】,但是每个线程的执行都有自己的执行环境【for 循环每一步都不会缺失(因为发生交叉覆盖导致循环混乱),最终sum结果都是45】,因此事隔离的。所以,随着的线程的切换,静态方法的参数环境也会发生变化(jvm计数器会记录当前线程上一次执行的位置(执行到哪个方法哪一行)),所以只要不是涉及共享变量,就不会出现并发问题。

最新文章

  1. Treap
  2. MFC创建文件和文件夹
  3. iOS 音乐
  4. servlet中的相对路径和绝对路径 及/, ./, ../的区别
  5. SSD(Single Shot MultiBox Detector)的安装配置和运行
  6. 最小的K个数:用快排的思想去解相关问题
  7. 通过indexPath找到对应的cell
  8. 如何启动/停止/重启MySQL
  9. ASP lable标签显示过长,自动换行。
  10. 搜狗2013年校园招聘研发类笔试试卷之C/C++类
  11. Python学习总结:目录
  12. java tools: jstat
  13. Windows 7妙用 笔记本变无线AP轻松共享
  14. QT全平台设置图标,全平台静态编译 good
  15. Windows MDI(Multiple-Document Interface)
  16. jenkins创建pipeline
  17. iPhone开发初探
  18. (转)Spring Boot 2 (二):Spring Boot 2 尝鲜-动态 Banner
  19. C++回调:利用Sink
  20. iOS开发-仿大众点评iPad侧边导航栏

热门文章

  1. android系统中自带的一些ThemeStyle
  2. 常见开发需求之前端利器webstorm中的git和快捷键
  3. Codeforces Round #367 (Div. 2)
  4. PHP 数据库操作类:ezSQL
  5. 修改tomcat服务器banner的方法
  6. 自动提交Git branch代码评审到Review Board系统
  7. js模块开发(一)
  8. 酷炫放大镜canvas实现
  9. 爬虫, 获取登录者的外网IP
  10. 【MongoDB:第二天】基本操作