⑴ 如何創建線程如何保證線程安全
創建線程的方式一:繼承Thread類(由於java單繼承的特性,這種方式用的比較少)
步驟:
1、繼承Thread類,然後重寫run方法
2、創建實現類對象、代理類對象,然後代理類對象調用start()方法啟動線程
用實現Runnable介面的方式,實現多線程:
《模擬搶票系統》,代碼如下:
線程調用了start()方法,並不意味著立即執行,而是到就緒狀態,等待cpu的調度,所以每次執行的結果都是不一樣的。
創建線程的方式三:實現java.util.concurrent並發包下的Callable介面(進階版,初學者做個了解)
步驟:
1、創建一個類實現Callable介面,然後重寫call()方法
(和run方法不一樣的是,call方法可以有返回值,並且可以拋出異常)
2、創建Callable的實現類對象--》創建執行服務--》提交執行服務得到Future對象--》獲取結果--》停止服務
⑵ Java涓23縐嶈捐℃ā寮忊斺斿崟渚嬫ā寮
Java涓栫晫涓鐨勫崟渚嬪湥孌匡細23縐嶈捐℃ā寮忔帰緔
鍦↗ava緙栫▼涓錛屽崟渚嬫ā寮忓傚悓涓搴фˉ姊侊紝榪炴帴鐫瀵硅薄鐨勭敓鍛藉懆鏈熺$悊鍜屽叏灞璁塊棶鐨勭簿濡欏鉤琛°傝╂垜浠涓璧鋒繁鍏ユ帰璁ㄥ叚縐嶅父瑙佷笖鍚勬湁鐗硅壊鐨勫疄鐜版柟寮忥紝瀹冧滑鍒嗗埆鏄錛氭噿奼夊紡銆侀タ奼夊紡銆佸弻閲嶆鏌ラ攣瀹氥侀潤鎬佸唴閮ㄧ被銆佹灇涓炬硶涓嶵hreadLocal錛屼互鍙婁竴縐嶅壋鏂扮殑娉ㄥ唽寮忓崟渚嬫ā寮忋
娉ㄥ唽寮忓崟渚嬬殑闈╂柊錛氶噰鐢ㄩ潤鎬丮ap綆$悊鍗曚緥瀵硅薄錛屽綋闇瑕佹椂錛屽疄渚嬪寲騫惰繑鍥炪傚湪璇稿傜嚎紼嬫睜銆佹暟鎹搴撹繛鎺ユ睜銆佹棩蹇楀硅薄鍜岄厤緗鏂囦歡絳夊満鏅涓錛屽畠鑳戒繚璇侀珮鏁堜笖綰跨▼瀹夊叏鐨勮塊棶銆
鐒惰岋紝鍗曚緥妯″紡騫墮潪涓甯嗛庨『錛屽畠涔熼潰涓存寫鎴橈細綰跨▼瀹夊叏闂棰橀渶瑕佸閥濡欏湴浣跨敤閿佹満鍒訛紝搴忓垪鍖栨椂鍙鑳戒駭鐢熷氫釜瀹炰緥錛岃繖鏃秗eadResolve()鏂規硶灝辨淳涓婄敤鍦轟簡錛涘弽灝勫彲鑳藉艱嚧縐佹湁鏋勯犲嚱鏁拌緇曡繃錛岃繖鏃舵垜浠闇鎶涘嚭寮傚父浠ョず璀﹀憡銆
緇撹錛氬崟渚嬫ā寮忔槸鎺у埗瀵硅薄鐢熷懡鍛ㄦ湡鍜屽疄鐜板叡浜璧勬簮鐨勫叧閿銆傚湪閫夋嫨鍝縐嶅疄鐜版柟寮忔椂錛屽姟蹇呮潈琛$嚎紼嬪畨鍏ㄣ佸簭鍒楀寲鍜屽弽灝勭殑鑰冮噺錛屼互閬垮厤浠g爜澶嶆潅鎬у崌綰у拰鎬ц兘鐨勯殣鎬ф崯鑰椼傚彧鏈夊湪鎮板綋鐨勬椂鏈猴紝瀹冩墠鑳芥垚涓轟唬鐮佽捐′腑鐨勫緱鍔涘姪鎵嬨
⑶ Java單例模式餓漢式會有線程安全問題嗎
1、答案:不會有線程安全問題。
2、首先,一個類可以被使用必須經過 載入、連接和初始化
3、餓漢模式的對象創建是在初始化的時候創建的,初始化操作是jvm執行的(會給類變數賦初始值,執行靜態代碼塊等,類變數是用static修飾的變數),並且在我們看來一個類的初始化只會執行一次(jvm會控制),是不會有線程安全問題出現的
3、糾錯:不是「類一載入就實例化」,而是類先載入、連接(此步驟執行時間不固定,但是在初始化執行前必須執行結束)。初始化執行的時機是你new了一個對象,或者使用了反射機制,或者調用類的靜態變數和方法或者啟動有main方法的類