我在应用程序中使用此代码发送一些字符串,抛出一个套接字。
public class OutgoingData {
public static DataOutputStream dos = null;
public static String toSend = "";
public static volatile boolean continuousSending = true;
public static String toSendTemp = "";
public static void startSending(final DataOutputStream d) {
new Thread(new Runnable() {
public void run() {
try {
dos = d;
while (continuousSending) {
if (!toSend.equals(toSendTemp)) {
dos.writeUTF(toSend);
dos.flush();
toSendTemp = toSend;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
从另一个线程我调用这个方法
private void send(String str) {
OutgoingData.toSend = str;
}
使用此实现是否会出现任何问题?从两个线程同步调用 send() 的情况除外。
我没有使用这样的东西:
private void send(final String str){
new Thread(new Runnable() {
@Override
public void run() {
synchronized (OutgoingData.dos) {
try {
OutgoingData.dos.writeUTF(str);
OutgoingData.dos.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
}
因为运行此代码的系统对进程可以创建的线程数有限制,并且需要很长时间才能锁定对象。