易截截图软件、单文件、免安装、纯绿色、仅160KB

java多线程同步出现的问题,请求支援

我写了一个多线程同步的小例子:
public class TestDemo {
public static void main(String[] args){
Demo dm = new Demo();
new Thread( dm).start();
new Thread( dm).start();
}
}

class Demo implements Runnable {
private int m = 3;
public void run(){
while(true){
synchronized(this){
if(m>0){
try {Thread.sleep(100);}catch(Exception e){
System.out.println(Thread.currentThread().getName()+"is wrong");
}
System.out.println(Thread.currentThread().getName()+"数字为"+ m--);
}else{
System.out.println(Thread.currentThread().getName()+"is end");
break;
}
}

}
}
}

按理说,2个线程调用start(),但是Thread.sleep(100);被写在synchronized块里,应该输出为

Thread-0数字为3
Thread-0数字为2
Thread-0数字为1
Thread-0is end
Thread-1is end

结果却是残酷的,执行为这个类,却得到

Thread-0数字为3
Thread-1数字为2
Thread-0数字为1
Thread-1is end
Thread-0is end

thread0运行到被synchronized锁定的代码块中,CPU不会应该再去执行其他线程了好呀,为何 Thread0和Thread1交替执行呢。实在是不明白了,往各位能帮忙看看

synchronized(this){}块将对this对象进行加锁处理。两个线程在同一时间内只能有一个可以运行dm对象中的这段代码。


相关问答:

Unable to compile class for JSP - Java / Web 开发

<%@page language="java" contentType="text/html;charset=gb2312" import="java.sql.*"%>
<jsp:useBean id="db" class="wang.connectDB"/>
< ......

Java RandomAccessFile 写入txt文件 - Java / Java SE

用RandomAccessFile写入TXT文件查看时是乱码,请问有什么方法可以写成可读的文件,不是用其他的文件操作,就是只用RandomAccessFile的方法是否可以实现?
Java code:
import java.io.*;
public class RandomAcce ......

eclipse连接mysql数据库 - Java / Eclipse

先上错误
无法联接数据库
java.sql.SQLException: Before start of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.ResultSet.checkRowPos(ResultSet.java: ......

mysql连接tomcat - Java / Web 开发

我已经按照教程上配置tomcat的server.xml
<Context path = "/POS" docBase = "POS" debug = "5" reloadable = "true" crossContext = "true" workDir = &quo ......

C/S项目架构设计----求助 - Java / Java SE

本人正在用Java做一个C/S架构的项目, 
可是由于项目比较大,前期对架构的设计尤其重要,因为后期可能随时会加个功能或者去掉某些功能。 
所以特地寻求如何设计C/S的架构使程序更加面向对象更加易于维 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号