• 当T C P收到发自T C P连接另一端的数据,它将发送一个确认。这个确认不是立即发送,
通常将推迟几分之一秒,这将在1 9 . 3节讨论。
• T C P将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输
过程中的任何变化。如果收到段的检验和有差错, T C P将丢弃这个报文段和不确认收到
此报文段(希望发端超时并重发)。
• 既然T C P报文段作为I P数据报来传输,而I P数据报的到达可能会失序,因此T C P报文段
的到达也可能会失序。如果必要, T C P将对收到的数据进行重新排序,将收到的数据以
正确的顺序交给应用层。
• 既然I P数据报会发生重复, T C P的接收端必须丢弃重复的数据。
• T C P还能提供流量控制。T C P连接的每一方都有固定大小的缓冲空间。T C P的接收端只
允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲
区溢出。
……………………………………………………………………………………
这两天也是朋友过来了,也没弄毕设了
刚就join()问题弄了下,发现是行不通的,因为这个线程是需要不断运行的,所以join无法等到那个进程结束从而会陷入阻塞。
其实不用做反而效率更高,因为我想前提是我的Singleton模式已经是保证线程安全了。
如果要做,应该用wait()和notify()也能实现,但进入阻塞了。
今天睡不着,看完《速度与》,就看了下,原来wait()进入阻塞的原因是没有其他线程notify().
今天看到WilliamChen的博客写到
“4.public boolean isInterrupted()该线程是否受到中断信号。
5.public static boolean interrupted(),检测当前线程是否接受到中断信号。它实际上是调用了Thread.currentThread().isInterrupted()实现的。
6.public final void join()该方法允许一个线程等待另一个线程的结束。比如t是一个目前正在执行的线程,那么t.join()将目前线程挂起直至线程t结束。
”
觉得在add ip操作时 是不是该等待getIpInfo线程finish??
因为这里2个线程并不需要保证内存一致性,所以只要保证线程的执行顺序,所以我觉得用join()就够了。如果需要考虑内存一致性的话,注意下面那段代码
private Tank tank;
public synchronized void putTank(Tank tank){
//Dont bother to check whether it has room.
this.tank=tank;
notifyAll();
}
public synchronized Tank getTank(){
//Check whether there's tank to consume
while(tank==null){
//No tank yet, let's wait.
try{
wait();
}catch(InterruptedException e){}
}
Tank retValue=tank.
tank=null; //Clear tank.
return retValue;
}
}
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-36628-4.html
长得好像庞麦郎啊
有啥用