Ⅰ java多線程web伺服器解決什麼用
web伺服器提供中間件,多線程解決多用戶同時訪問效率問題,java就是用java寫的
Ⅱ 如何使用java多線程處理web請求
WEB伺服器會幫你把每個訪問請求開辟一個線程,你只要按照你所開發的框架,比如tomcat會讓你利用servlet這個框架來寫代碼。具體真的一言難盡,反正不用寫到RUN中,除非你想對線程式控制制到極致,例如你要做測試。 多個瀏覽器的意思如果是
Ⅲ 什麼是Java多線程
多線程的概念?
說起多線程,那麼就不得不說什麼是線程,而說起線程,又不得不說什麼是進程。
進程(Process)是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。在早期面向進程設計的計算機結構中,進程是程序的基本執行實體;在當代面向線程設計的計算機結構中,進程是線程的容器。程序是指令、數據及其組織形式的描述,進程是程序的實體。
進程可以簡單的理解為一個可以獨立運行的程序單位。它是線程的集合,進程就是有一個或多個線程構成的,每一個線程都是進程中的一條執行路徑。
那麼多線程就很容易理解:多線程就是指一個進程中同時有多個執行路徑(線程)正在執行。
為什麼要使用多線程?
1.在一個程序中,有很多的操作是非常耗時的,如資料庫讀寫操作,IO操作等,如果使用單線程,那麼程序就必須等待這些操作執行完成之後才能執行其他操作。使用多線程,可以在將耗時任務放在後台繼續執行的同時,同時執行其他操作。
2.可以提高程序的效率。
3.在一些等待的任務上,如用戶輸入,文件讀取等,多線程就非常有用了。
缺點:
1.使用太多線程,是很耗系統資源,因為線程需要開辟內存。更多線程需要更多內存。
2.影響系統性能,因為操作系統需要在線程之間來回切換。
3.需要考慮線程操作對程序的影響,如線程掛起,中止等操作對程序的影響。
4.線程使用不當會發生很多問題。
總結:多線程是非同步的,但這不代表多線程真的是幾個線程是在同時進行,實際上是系統不斷地在各個線程之間來回的切換(因為系統切換的速度非常的快,所以給我們在同時運行的錯覺)。
2.多線程與高並發的聯系。
高並發:高並發指的是一種系統運行過程中遇到的一種「短時間內遇到大量操作請求」的情況,主要發生在web系統集中大量訪問或者socket埠集中性收到大量請求(例如:12306的搶票情況;天貓雙十一活動)。該情況的發生會導致系統在這段時間內執行大量操作,例如對資源的請求,資料庫的操作等。如果高並發處理不好,不僅僅降低了用戶的體驗度(請求響應時間過長),同時可能導致系統宕機,嚴重的甚至導致OOM異常,系統停止工作等。如果要想系統能夠適應高並發狀態,則需要從各個方面進行系統優化,包括,硬體、網路、系統架構、開發語言的選取、數據結構的運用、演算法優化、資料庫優化……。
而多線程只是在同/非同步角度上解決高並發問題的其中的一個方法手段,是在同一時刻利用計算機閑置資源的一種方式。
多線程在高並發問題中的作用就是充分利用計算機資源,使計算機的資源在每一時刻都能達到最大的利用率,不至於浪費計算機資源使其閑置。
3.線程的創建,停止,常用方法介紹。
1.線程的創建:
線程創建主要有2種方式,一種是繼承Thread類,重寫run方法即可;(Thread類實現了Runable介面)
另一種則是實現Runable介面,也需要重寫run方法。
線程的啟動,調用start()方法即可。 我們也可以直接使用線程對象的run方法,不過直接使用,run方法就只是一個普通的方法了。
其他的還有: 通過匿名內部類的方法創建;實現Callable介面。。。。。
2.線程常用方法:
currentThread()方法:該方法返回當前線程的信息 .getName()可以返回線程名稱。
isAlive()方法:該方法判斷當前線程是否處於活動狀態。
sleep()方法:該方法是讓「當前正在執行的線程「休眠指定的時間,正在執行的線程是指this.currentThread()返回的線程。
getId()方法:該方法是獲取線程的唯一標識。
3.線程的停止:
在java中,停止線程並不簡單,不想for。。break那樣說停就停,需要一定的技巧。
線程的停止有3種方法:
1.線程正常終止,即run()方法運行結束正常停止。
2.使用interrupt方法中斷線程。
3.使用stop方法暴力停止線程。
interrupt方法中斷線程介紹:
interrupt方法其實並不是直接中斷線程,只是給線程添加一個中斷標志。
判斷線程是否是停止狀態:
this.interrupted(); 判斷當前線程是否已經中斷。(判斷的是這個方法所在的代碼對應的線程,而不是調用對象對應的線程)
this.isInterrupted(); 判斷線程是否已經中斷。(誰調用,判斷誰)
註:.interrupted()與isInterrupted()的區別:
interrupted()方法判斷的是所在代碼對應的線程是否中斷,而後者判斷的是調用對象對應的線程是否停止
前者執行後有清除狀態的功能(如連續調用兩次時,第一次返回true,則第二次會返回false)
後者沒有清除狀態的功能(兩次返回都為true)
真正停止線程的方法:
異常法:
在run方法中 使用 this.interrupted();判斷線程終止狀態,如果為true則 throw new interruptedException()然後捕獲該異常即可停止線程。
return停止線程:
在run方法中 使用 this.interrupted();判斷線程終止狀態,如果為true則return停止線程。 (建議使用異常法停止線程,因為還可以在catch中使線程向上拋,讓線程停止的事件得以傳播)。
暴力法:
使用stop()方法強行停止線程(強烈不建議使用,會造成很多不可預估的後果,已經被標記為過時)
(使用stop方法會拋出 java.lang.ThreadDeath 異常,並且stop方法會釋放鎖,很容易造成數據不一致)
註:在休眠中停止線程:
在sleep狀態下停止線程 會報異常,並且會清除線程狀態值為false;
先停止後sleep,同樣會報異常 sleep interrupted;
4.守護線程。
希望對您有所幫助!~
Ⅳ 1.javaweb中高並發和多線程之間的有必然聯系嗎2.tomcat的多線程和你代碼中的多線程之間的關系
簡單點,tomcat是一個web容器,你的web項目在tomcat內部,用戶先訪問tomcat進入容器,才能去訪問web項目里的方法。至於支持多人訪問,牽涉到線程池的概念,見得是你要訪問就要有線程,如果你設置的允許最大連接數是5,同事訪問超過5人就要等待其他人釋放。
現在說多人同時訪問web方法。比如你在秒殺一個商品,只剩一件了,同時訪問給誰呢?一個簡單的解決方法就是給方法加鎖,其中一個線程搶到鎖,其他人不能訪問了,這個線程執行減庫存操作。東西買完了,釋放鎖。
你可以下個慕課網,有比較詳細的秒殺教程
Ⅳ 求教,關於多線程在javaweb中的應用解決辦法
WEB伺服器會幫你把每個訪問請求開辟一個線程,你只要按照你所開發的框架,比如tomcat會讓你利用servlet這個框架來寫代碼。具體真的一言難盡,反正不用寫到RUN中,除非你想對線程式控制制到極致,例如你要做測試。
多個瀏覽器的意思如果是(無論多台電腦上還是同一台電腦上的)多個頁面打開同一網站的某個功能頁面,那麼如第一個問題所說,每一次訪問(即打開頁面)都是一個請求,伺服器會為每個請求開辟一個線程,就是多線程。
Ⅵ 求教,關於多線程在javaweb中的應用
Thread是針對是java其本身所具有的,但並不能說其沒有調用操作系統,其最底層的時間片調度是按照操作系統來執行的。
Thread下可以創建Thread,2個Thread在一定條件下也可以相互調用。
根據以上特點可以總結認為java中的線程能讓高級程序員更好的對龐大和復雜的數據流進行拆分,重組從而減低各個環節性能需求,通過增加各項負荷達到系統資源分配的最優值。
Ⅶ java的web開發需要用多線程嗎
java多線程在web上的應用很多,struts不就是多線程的么。
java多線程語用首先要考慮你的模塊是否是可以支持並行的,並且多線程操作的時候進來用線程池,而不是自己手寫多線程。還有多線程操作的模塊盡量注意不要出現超大對象,不然很可能會出現內存溢出或者程序假死的可能。多線程是個多面手,用好了很高效,用不好,問題特別多。並且還不好定位。
最後一句,慎用多線程。
Ⅷ JAVA WEB如何實現多線程統計排名
一個請求就是一個線程,這個線程不需要我們來控制,WEB容器自己實現,這是第一個應用。
我們也可以在web中new線程來做我們的事。比如,當我有一個很耗時的操作,像統計排名之類的功能。當用戶在web上點擊排名時,由於這個計算量太大,可能要計算3~5分鍾或更久。這時我們會在servlert中new一個線程來做這個事情,這樣用戶就可以點擊排名後去做其他的事,等排名出來現通知他。如果不new線程當用戶點排名時,瀏覽器就會一直卡在這里,一個圈圈轉啊轉的,就是不出來。所以我們可以new線程來做耗是任務。還有很多比如,定時任務、WEB版的爬蟲程序、監聽等
Ⅸ java web中的多線程問題
java web中是否用到多線程,這需要看具體情況,一般情況下是不用考慮的。
但是有些情況可以使用多線程。
例如:批量的導入大批量的數據。這種情況下就可以使用多線程來做。
因為在批量的導入大批量數據的時候可能要執行很長時間,如果使用多線程來做的話,用戶在導入的過程時還可以進行其他事情的操作(多線程的特徵),給用戶比較好的用戶體驗。但是如果不使用多線程的話可能用戶要在那裡等很長時間,什麼也幹不了。
更多內容:http://skyuck.javaeye.com/