解决方案 »
- 求一正则表达式
- 弱弱的问一下jquery和sql注入
- java.util.logging.Logger类的使用:如果生成的aaa.log.n文件被打开时,log数据丢失。
- ==用过Maven和Archiva的看过来==
- 我想请问下一个类型转换的问题
- 各位兄弟,帮小弟看一下这个程序啊,谢谢了哦!
- 请问,在interface中, final static 有什么用处??
- 我的*.txt有两行字,我通过s.readline()为什么只能打印一行?
- 请问具体介绍一下visual cafe吗??有下载的地方吗?多大?有卖的吗?
- java日期操作
- java如何实现对打开文件要密码提示?
- mybatis中的SynchronizedCache源码遇到的不懂的地方?求大神帮看看
http://blog.csdn.net/virgoboy2004/article/details/7585182
public class TestThread extends Thread {
public static int n = 0;
static synchronized void inc(){
n++;
}
public void run(){
for (int i=0;i<10 ;i++ ) {
try{
inc();
//sleep(3); //这里去掉
}catch (Exception e) {
}
}
}
public static void main(String[] args) throws Exception {
Thread thred[] = new Thread[100];
for (int i=0;i<thred.length ;i++ ) {
thred[i] = new TestThread();
}
for (int i=0;i<thred.length ;i++ ) {
thred[i].start();
}
sleep(30);//你在这里加个sleep(30);
System.out.println(n);
}
}
然后你就可以算出是1000了没有错的!为什么会这样呢?因为多线程是独立出去的线程.与MAIN线程无关了!它们与MAIN线程是平等的!你这里的原因是你main线程已经结束了!你拿到的只是MAIN线程结束那一刻的值!并不是所有程序结束的值!也就是说别的线程还在走!没走完!再加你为别的程序加睡眠!所以别的线程跑的更慢了!
当然也可以把n放在同步方法中打印,主线程只是负责开启其他线程