Time of Update: 2018-12-04
一、同步的特性1. 不必同步類中所有的方法, 類可以同時擁有同步和非同步方法.2. 如果線程擁有同步和非同步方法, 則非同步方法可以被多個線程自由訪問而不受鎖的限制. 參見實驗1: http://blog.csdn.net/huang_xw/article/details/73185613. 如果兩個線程要執行一個類中的同步方法, 並且兩個線程使用相同的執行個體來調用方法, 那麼一次只能有一個線程能夠執行方法, 另一個需要等待, 直到鎖被釋放.
Time of Update: 2018-12-04
原文地址: http://blog.csdn.net/huang_xw/article/details/7318554/** * @Description: 兩個線程(線程1與線程2)訪問同一個對象的內同步方法syn()與非同步方法nonsyn() * 結果: 線程1訪問對象sameObj的同步方法時, 線程2可以同時訪問對象sameObj的非同步方法. * @author snoopy * @blog http://blog.csdn.net/huang_xw */package
Time of Update: 2018-12-04
import java.util.concurrent.Exchanger;/** * Exchanger讓兩個線程可以互換資訊。 * 例子中服務生線程往空的杯子裡倒水,顧客線程從裝滿水的杯子裡喝水, * 然後通過Exchanger雙方互換杯子,服務生接著往空杯子裡倒水,顧客接著喝水, * 然後交換,如此周而復始。 */public class ExchangerTest {// 描述一個裝水的杯子public static class Cup{// 標識杯子是否有水private
Time of Update: 2018-12-04
JDK包括2個JVM的實現Java HotSpot Client VM(-client),為在用戶端環境中減少啟動時間而最佳化;Java HotSpot Server VM(-server),為在伺服器環境中最大化程式執行速度而設計。比較:Server VM啟動比Client VM慢,運行比Client VM快。如何將VM設定成 Server VM:找到 [jre安裝目錄]/lib/i386/jvm.cfg 檔案,裡面第一行寫的是 -client
Time of Update: 2018-12-04
原文地址: http://blog.csdn.net/huang_xw/article/details/7318554/** * @Description: 兩個線程(線程1與線程2)訪問同一個類的靜態同步方法syn() * 結果: 線程1訪問對象sameObj1的靜態同步方法syn()時, 線程2訪問對象sameObj2中的靜態同步方法syn()阻塞. 或者線程2訪問時, 線程1阻塞. * 結論: 不同線程訪問同一個類的靜態同步方法時, 線程間是互斥的. * @author
Time of Update: 2018-12-04
原文地址: http://blog.csdn.net/huang_xw/article/details/7318554/** * @Description: 線程1訪問安全執行緒對象StringBuffer的執行個體, 線程2要訪問時該對象則會出現阻塞現象. * @author snoopy * @blog http://blog.csdn.net/huang_xw */package basic.b_syn;import org.apache.log4j.Logger;public
Time of Update: 2018-12-04
TcpNoDelay=false,為啟用nagle演算法,也是預設值。 Nagle演算法的立意是良好的,避免網路中充塞小封包,提高網路的利用率。但是當Nagle演算法遇到delayed ACK悲劇就發生了。Delayed ACK的本意也是為了提高TCP效能,跟應答資料捎帶上ACK,同時避免糊塗視窗綜合症,也可以一個ack確認多個段來節省開銷。悲劇發生在這種情況,假設一端發送資料並等待另一端應答,協議上分為頭部和資料,發送的時候不幸地選擇了write-write,然後再read,也就是先發送頭部,
Time of Update: 2018-12-04
輸入串連指示(對串連的請求)的最大隊列長度被設定為 backlog 參數。如果隊列滿時收到串連指示,則拒絕該串連。注意: 1. backlog參數必須是大於 0 的正值。如果傳遞的值等於或小於 0,則假定為預設值。 2. 經過測試這個隊列是按照FIFO(先進先出)的原則。3.
Time of Update: 2018-12-04
build.ant<?xml version="1.0" encoding="UTF-8"?><project default="output" basedir="."><tstamp></tstamp><property file="build.properties" /><property file="version.properties" /><property environment="env"
Time of Update: 2018-12-04
設定socket調用InputStream讀資料的逾時時間,以毫秒為單位,如果超過這個時候,會拋出java.net.SocketTimeoutException。當輸入資料流的read方法被阻塞時,如果設定timeout(timeout的單位是毫秒),那麼系統在等待了timeout毫秒後會拋出一個InterruptedIOException例外。在拋出例外後,輸入資料流並未關閉,你可以繼續通過read方法讀取資料。當底層的Socket實現不支援SO_TIMEOUT選項時,這兩個方法將拋出Sock
Time of Update: 2018-12-04
原文地址: http://blog.csdn.net/huang_xw/article/details/7318554/** * @Description: 兩個線程(線程1與線程2)訪問同一個對象的內同步方法syn * 結果: 線程1訪問對象sameObj的同步方法syn()時, 線程2訪問對象sameObj中的同步方法syn()阻塞. 或者線程2訪問時, 線程1阻塞. * 結論: 不同線程訪問同一個對象的相同同步方法時, 線程間是互斥的. * @author snoopy *
Time of Update: 2018-12-04
原文地址: http://blog.csdn.net/huang_xw/article/details/7318554/** * @Description: 兩個線程(線程1與線程2)訪問同一個對象的內同步方法syn1()與同步方法syn2() * 結果: 線程1訪問對象sameObj的同步方法syn1()時, 線程2訪問對象sameObj中的同步方法syn2()阻塞. 或者線程2訪問時, 線程1阻塞. * 結論: 通常知道不同線程訪問同一個對象的相同同步方法時, 線程間是互斥的. *
Time of Update: 2018-12-04
整個IO包實際上分為位元組流和字元流,但是除了這兩個流之外,還存在一組位元組流-字元流的轉換類。OutputStreamWriter:是Writer的子類,將輸出的字元流變為位元組流,即將一個字元流的輸出對象變為位元組流輸出對象。InputStreamReader:是Reader的子類,將輸入的位元組流變為字元流,即將一個位元組流的輸入對象變為字元流的輸入對象。如果以檔案操作為例,則記憶體中的字元資料需要通過OutputStreamWriter變為位元組流才能儲存在檔案中,讀取時需要將讀入的位元
Time of Update: 2018-12-04
發生死結的原因一般是兩個對象的鎖相互等待造成的。下面用一個執行個體來構造這種情況:package basic.e_deadlock;import org.apache.log4j.Logger;public class TestDeadLock {public static void main(String[] args) {DeadlockRisk dead = new DeadlockRisk();MyThread t1 = new MyThread(dead, 1, 2,
Time of Update: 2018-12-04
一、按資料來源(去向)分類:1 、是檔案:FileInputStream, FileOutputStream, ( 位元組流 )FileReader, FileWriter( 字元 )2 、是 byte[]:ByteArrayInputStream, ByteArrayOutputStream( 位元組流 )3 、是 Char[]: CharArrayReader, CharArrayWriter( 字元流 )4 、是 String: StringBufferInputStream,
Time of Update: 2018-12-04
keepalive不是說TCP的常串連,當我們作為服務端,一個用戶端串連上來,如果設定了keeplive為true,當對方沒有發送任何資料過來,超過一個時間(看系統核心參數配置),那麼我們這邊會發送一個ack探測包發到對方,探測雙方的TCP/IP串連是否有效(對方可能斷點,斷網)。如果不設定,那麼用戶端宕機時,伺服器永遠也不知道用戶端宕機了,仍然儲存這個失效的串連。當然,在用戶端也可以使用這個參數。用戶端Socket會每隔段的時間(大約兩個小時)就會利用閒置串連向伺服器發送一個資料包。這個資料包
Time of Update: 2018-12-04
Executors類,提供了一系列Factory 方法用於創先線程池,返回的線程池都實現了ExecutorService介面。1. newFixedThreadPoolpublic static ExecutorService newFixedThreadPool(int nThreads);public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory
Time of Update: 2018-12-04
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit,
Time of Update: 2018-12-04
public final void join() throws InterruptedException等待該線程終止。public final void join(long millis) throws InterruptedException等待該線程終止的時間最長為 millis 毫秒。逾時為 0 意味著要一直等下去。 public final void join(long millis, int nanos) throws
Time of Update: 2018-12-04
by Budi Kurniawan Translated by Javafuns04/23/2003 編輯批註: 本文改編自 Budi 個人出版的關於TOMCAT內部實現原理的書.你可以到他的網站上找到更多這方面的資訊. web server 也叫 Hypertext Transfer Protocol (HTTP) server, 因為它使用的是HTTP協議與用戶端通訊, 通常是指那些 網頁瀏覽器. 基於 Java 的 web server 使用2個重要的類,