日期:2014-05-20  浏览次数:20635 次

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这个变量资源是否独占的
------解决方案--------------------
探讨

str这个变量资源是否独占的

------解决方案--------------------
探讨
服务器端的代码如下:


import java.io.*;
import java.net.*;
import java.util.*;

public class ChatServer01 {

boolean connect=false;
ServerSocket ss=null;
List<Client> clients=new ArrayList<Client>()……

------解决方案--------------------
探讨
引用:

引用:
服务器端的代码如下:


import java.io.*;
import java.net.*;
import java.util.*;

public class ChatServer01 {

boolean connect=false;
ServerSocket ss=null;
……