java线程问题。。
(第一种情况) public void sendMessage(){
try {
System.out.println(str+"!first");
dos.writeUTF(str);
} catch (
IOException e) {
e.printStackTrace();
}
}
public void run() {
try{
//接受客户端发送过来的信息,并读取信息
while(connect){
str=dis.readUTF();
//把信息发送给各个客户端
for(int i=0;i<clients.size();i++){
//实例化各个客户端
Client c1=clients.get(i);
c1.sendMessage();
}
}
(第二种情况) public void sendMessage(String str){
try {
System.out.println(str+"!first");
dos.writeUTF(str);
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
try{
//接受客户端发送过来的信息,并读取信息
while(connect){
str=dis.readUTF();
//把信息发送给各个客户端
for(int i=0;i<clients.size();i++){
//实例化各个客户端
Client c1=clients.get(i);
c1.sendMessage(str);
}
}
(问题:为什么从客户端输入时。。输出的结果不同。是什么原理呢?)
------解决方案--------------------不明白LZ想说什么?
线程的执行是随机的,如果是多线程的话
从str=dis.readUTF(); 到c1.sendMessage(str);(或c1.sendMessage();)
不能保证str的一致,因为第一个线程刚要执行c1.sendMessage(str);的时候,另一个线程可能会执行str=dis.readUTF(); 这样,str就被改变了
------解决方案--------------------只有上帝知道下一时刻cpu会执行哪一个线程
------解决方案--------------------str这个变量资源是否独占的
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------