❶ java多線程並發的問題
回答這個問題需要先弄清楚線程的概念和線程的生命周期。
線程:是指程序代碼的一次執行,是動態的過程。樓主在定義OneTh這個實現Runnable介面類的時候肯定復寫了他的run()方法。onet1和onet2是兩個線程,也就是說雖然他們的run()方法相同,但是是執行了兩次的。
計算機中CPU的調度過程:現在的電腦看上去能同時實現多任務,像是一邊上QQ,一邊聽音樂,還可以一邊上網。但計算機中的CPU只有一個,它沒有分身術,不可能真正意義上實現同時運行這么多程序。而是採用了一種時間片輪轉的方式,為每個應用程序賦予極短的時間,然後高速的在不同的程序間切換,至於每次切換到那個程序,這個要由CPU和線程的優先順序來決定。
線程的生命周期:創建時是初始化了這個線程,調用start方法時,是讓這個線程進入了可運行狀態,注意是可運行,不是正在運行。就像上面說的,在某一時刻CPU具體要運行誰是由CPU和線程的優先順序決定的。當線程被CPU運行時,就會開始執行run方法,但可能執行到一半時,CPU又被其他可運行線程搶走,而只能暫停執行。
JAVA程序線程的運行:在我們使用java命令來運行程序時,這時候已經開始了兩個線程,一個是main()方法的線程,一個是垃圾回收的線程。當樓主調用start方法開啟另外兩個線程時。這時候由於CPU來決定運行哪個線程。所以雖然noet1是先開啟的,但在執行noet1時,CPU可能又去跑去執行main線程了,然後就會開啟onet2.
還有我覺得主線程結束了,只不過其他兩個線程仍在繼續運行。所以會列印出結果。
樓主如果還有什麼不明白的話可以繼續問或者相互討論。
❷ java並發是什麼意思
是多線程,多個線程並發執行 處理方法:創建線程對象,創建啟動線程方法(start),等main方法線程結束後,自動調用start執行並處理線程體中內容(start中內容)。(註:「並發處理」並不是同時處理,是交替處理或是同步線程交替、等待) 線程還可以中斷、和別的線程同步等 線程的幾種狀態:新建態(NEW)、等待態1(sleep中)(TIMED_WAITING)、等待態2(wait中)(WAITING)、阻塞態(BLOCKED)、終止態(TERMINATED)
❸ JAVA中怎麼處理高並發的情況
java處理高並發
這個問題 首先要區分 是否需要中間件 如果需要就要在中間件上做文章。
滿足高並發 就要支持多線程,要用資料庫連接池,利用工廠模式,對象容器 等技術共同處理高並發
❹ 解釋一下java多線程中,並發和並行。
所謂進程(process)就是一塊包含了某些資源的內存區域。操作系統利用進程把它的工作劃分為一些功能單元。進程中所包含的一個或多個執行單元稱為線程(thread)。進程還擁有一個私有的虛擬地址空間,該空間僅能被它所包含的線程訪問。線程只能歸屬於一個進程並且它只能訪問該進程所擁有的資源。當操作系統創建一個進程後,該進程會自動申請一個名為主線程或首要線程的線程。
進程並不是真正意義上的同時運行,而是並發運行。
一個進程至少有一個線程。線程的劃分尺度小於進程,使得多線程程序的並發性高。另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。
線程在執行過程中與進程的區別在於每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用來實現進程的調度和管理以及資源分配。
多個線程或進程」同時」運行只是感官上的一種表現。事實上進程和線程是並發運行的,OS的線程調度機制將時間劃分為很多時間片段(時間片),盡可能均勻分配給正在運行的程序,獲取CPU時間片的線程或進程得以被執行,其他則等待。而CPU則在這些進程或線程上來回切換運行。微觀上所有進程和線程是走走停停的,宏觀上都在運行,這種都運行的現象叫並發,但是不是絕對意義上的「同時發生。
❺ java中所謂的並發處理是什麼意思
是多線程,多個線程並發執行
處理方法:創建線程對象,創建啟動線程方法(start),等main方法線程結束後,自動調用start執行並處理線程體中內容(start中內容)。(註:「並發處理」並不是同時處理,是交替處理或是同步線程交替、等待)
線程還可以中斷、和別的線程同步等
線程的幾種狀態:新建態(NEW)、等待態1(sleep中)(TIMED_WAITING)、等待態2(wait中)(WAITING)、阻塞態(BLOCKED)、終止態(TERMINATED)
❻ java多線程並發問題怎麼解決
java多線程並發問題產生的主要原因是多個線程訪問一個實例,導致其中一個線程修改或刪除這個實例時,其他線程產生並發問題。
要解決這種並發問題有兩種方法:
(1)加上線程鎖synchronization
(2)還有個不是辦法的辦法:不用成員變數,用局部變數
❼ java中多線程地並發運行是什麼意思有什麼作用.好處
如果並發的線程數量很多,並且每個線程都是執行一個時間很短的任務就結束了,這樣頻繁創建線程就會大大降低系統的效率,因為頻繁創建線程和銷毀線程需要時間。因此我們可以用多線程處理並發運行,提高資源利用率;
舉例
假如有一個工廠,工廠裡面有10個工人,每個工人同時只能做一件任務。
因此只要當10個工人中有工人是空閑的,來了任務就分配給空閑的工人做;
當10個工人都有任務在做時,如果還來了任務,就把任務進行排隊等待;
如果說新任務數目增長的速度遠遠大於工人做任務的速度,那麼此時工廠主管可能會想補救措施,比如重新招4個臨時工人進來;
然後就將任務也分配給這4個臨時工人做;
如果說著14個工人做任務的速度還是不夠,此時工廠主管可能就要考慮不再接收新的任務或者拋棄前面的一些任務了。
當這14個工人當中有人空閑時,而新任務增長的速度又比較緩慢,工廠主管可能就考慮辭掉4個臨時工了,只保持原來的10個工人,畢竟請額外的工人是要花錢的。
❽ java什麼是線程並發怎麼解決
並發是多個任務同時執行,在java中是通過多線程實現的。你想問的是如何安全地並發訪問臨界資源吧,在java中一般通過加鎖來保證。
❾ JAVA怎麼處理線程池中線程的並發問題
可以通過以下原則解決:
1、設置線程池的最大線程數
2、設置線程池的並發處理線程數量
3、設置線程池最大的隊列線程數
4、做好線程池的線程清理工作
做好這幾點,理論上沒問題了,具體還得看編程者代碼的質量。
PS:伺服器不可能為每一個請求都創建線程,得考慮到最大負載,當達到臨界值的時候,伺服器返回繁忙狀態,拒絕服務即可,當然這是簡單的處理辦法。
❿ java 多線程如何處理並發性
類里保存一個沒用的Object對象,對需要並發的代碼都synchonized這個對象