我写了一个多线程同步的小例子:
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对象中的这段代码。
相关问答:
<%@page language="java" contentType="text/html;charset=gb2312" import="java.sql.*"%>
<jsp:useBean id="db" class="wang.connectDB"/>
< ......
用RandomAccessFile写入TXT文件查看时是乱码,请问有什么方法可以写成可读的文件,不是用其他的文件操作,就是只用RandomAccessFile的方法是否可以实现?
Java code:
import java.io.*;
public class RandomAcce ......
先上错误
无法联接数据库
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: ......
我已经按照教程上配置tomcat的server.xml
<Context path = "/POS" docBase = "POS" debug = "5" reloadable = "true" crossContext = "true" workDir = &quo ......
本人正在用Java做一个C/S架构的项目,
可是由于项目比较大,前期对架构的设计尤其重要,因为后期可能随时会加个功能或者去掉某些功能。
所以特地寻求如何设计C/S的架构使程序更加面向对象更加易于维 ......