请问java多线程的线程切换的最小单元是什么,是语句还是代码块 for(i=0;i<100;i++) System.out.println("hello world");想上面这样的循环可不可能出现输出hello之后线程就被切换成另一个了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你查一下 System.out 对象的 println 代码,里面有同步块,所以,输出时,要么不输出,要么参数内容全输出。 从程序的逻辑性来讲,Sun当时设计JDK API的时候肯定考虑了这个问题的,所以必定是有线程同步保护的,要不然不就乱了不过楼主倒是可以研究一下StringBuffer和StringBuilder的区别,听说就是一个线程不安全一个线程安全。当然,线程安全的类肯定比线程不安全的类要稍慢 回复1楼:那如果我在循环里面有多条输出语句,通过代码运行的结果看全多是这些输出语句一起输出,只有在中间穿插sleep语句才会出现线程切换,那线程切换的最小单元到底是什么,是语句还是代码块? “请问java多线程的线程切换的最小单元是什么,是语句还是代码块”都不对。首先,切换线程的本质上其实是操作系统。时机点的话,其实可以说是想切换就切换,或者说到CPU指令这个粒度。那么,别说你这个循环了,即便是: i++这看似一句代码,执行时都可以切换几次线程。对了,即便你使用 同步块,对线程切换还是没有任何影响的。 例如如下代码public void run(){ for(int i=0;i<5;i++){ for(long k=0;k<1000000;k++); System.out.println(name+":"+i); //1 System.out.println("线程未结束"); //2 } System.out.println("线程结束"); }为什么每次1,2两处的输出总是接连的输出,有没有可能出现A线程在1处输出后,切换到另一个线程输出1处代码,而不是A接着输出2处代码 谁能推荐一些关于java多线程的博客或是文章 dom4j解析文件发现没有加载类的错误 Struts2 教程 java中有Client这个类吗? 请问怎么把一个double 类型的变量赋值给 jTextField 谢谢!!! 请教端口问题 javamail如何下载外网的附件(如163、yahoo、126之类)?? Java流与生活用电,我的理解与大家分享!!! 在C++或JAVA或VB中有没有某类函数将任一排列组合拆分成单元并载入数据库表中??十万火急 听说,在JDK1.5中要加入泛型不知道属实? 如何在窗体中精确地放置组件。 一款iOS平台下的求路径游戏,想用java求解,不知道是否可行,各路大神帮忙看看 求助!!!
所以,输出时,要么不输出,要么参数内容全输出。
不过楼主倒是可以研究一下StringBuffer和StringBuilder的区别,听说就是一个线程不安全一个线程安全。当然,线程安全的类肯定比线程不安全的类要稍慢
都不对。首先,切换线程的本质上其实是操作系统。时机点的话,其实可以说是想切换就切换,或者说到CPU指令这个粒度。那么,别说你这个循环了,即便是:
i++
这看似一句代码,执行时都可以切换几次线程。
对了,即便你使用 同步块,对线程切换还是没有任何影响的。
public void run(){
for(int i=0;i<5;i++){
for(long k=0;k<1000000;k++);
System.out.println(name+":"+i); //1
System.out.println("线程未结束"); //2
}
System.out.println("线程结束");
}
为什么每次1,2两处的输出总是接连的输出,有没有可能出现A线程在1处输出后,切换到另一个线程输出1处代码,而不是A接着输出2处代码