A. 一個java socket能處理多少線程
可以寫個demo試一下啊,應該是可以的,socket接收到的消息只能被其中一個線程接收。線程1 和2 接受到的肯定不是同一個消息。會有先後之分。看你怎麼控制。比如從接收的消息是ABCD,那麼這相當於一個資源。線程1和2在這里拿消息,拿到之後,socket裡面就少了,比如線程1拿到AB,線程2拿到CD
B. java多線程:一個程序能開多少條線程
看你伺服器配置,理論上cpu核越多,主頻越高開的線程越多。
C. java聊天程序為什麼需要多線程
必然的要加多線程啊,不加也可以
家多線程的情況主要是在伺服器端使用多線程非同步執行信息的的推送
如果不加就只能一個一個依次處理信息,也就是多個用戶同時發送信息到伺服器之後,還要在伺服器排隊,先到的先推送,後到的等待前面的
D. 多線程跑一個程序,可以節約多少時間
理論上可以節約10倍的時間,但是因為創建線程也是需要時間的,所以運行時間為大於10s,至於小不小於100s不好說。
並不是所有情況都需要多線程優化,有些時候多線程優化反而會降低運行速度和編寫難度
E. 多核CPU在處理單個單線程程序的時候速度不變。那在處理多個單線程程序的時候是只用一個核處理還是雙核
只要設置沒錯的話,一個單線程程序會佔用一個核心,雖然有傳說中的超線程技術是邏輯核心提升一倍,但是物理核心空閑時間有限,所以當兩個單線程擠到一個物理核心裡那就會很慢。所以,你問題的答案就是處理多個單線程程序時,在不存在超線程技術時會調用相應數量(小於等於物理核心數)的核心進行處理。
我覺得是多線程先被提出,但是多線程之前,還有一個超線程技術,也就是最早出現的奔四超線程技術,就是將單物理內核模擬為雙邏輯內核,所以對於不支持多線程的軟體在處理時仍然是單線程,但是因為超線程技術,會在處理單線程軟體時,將另一個單線程軟體拉進來處理,直到出現多線程程序,然後再出現多內核,然後多內核超線程。
F. 設計一個程序,兩個線程
/**
* 樓主,這個調試通過沒問題的 Main.java
*/
public class Main{
int i = 1;
public static void main(String[] args){
Main m = new Main();
new Thread(new Increate(m)).start();
new Thread(new Decrease(m)).start();
}
public static void sleep(){
try{
Thread.sleep(1000L);
}catch(Exception e){
}
}
}
class Increate implements Runnable{
private Main main;
public Increate(Main m){
this.main = m;
}
public void run(){
int value;
while(true){
Main.sleep();
synchronized(main){
if(main.i == 2){
continue;
}
value = main.i++;
System.out.println(value);
}
}
}
}
class Decrease implements Runnable{
private Main main;
public Decrease(Main m){
this.main = m;
}
public void run(){
int value;
while(true){
Main.sleep();
synchronized(main){
if(main.i == 1){
continue;
}
value = main.i--;
System.out.println(value);
}
}
}
}
G. 編寫一個多線程程序,此程序中包含2個線程,要求:第一個線程能夠計算1+2+3+...+1000的值
package example_2;
public class Example3 extends Thread{
private int ip;
public Example3(int n){
ip = n;
}
public void run(){
int i = 0;
int total = 0;
for(;i <= ip;i++){
total += i;
}
System.out.println("total[" + ip + "] = " + total);
}
public static void main(String[] args) {
Example3 example3 = new Example3(1000);
Example3 example= new Example3(10);
example3.start();
example.start();
}
}
H. 一個最簡單的Java程序有多少線程
有三種:
(1)繼承Thread類,重寫run函數
創建:
class xx extends Thread{
public void run(){
Thread.sleep(1000) //線程休眠1000毫秒,sleep使線程進入Block狀態,並釋放資源
}}
開啟線程:
對象.start() //啟動線程,run函數運行
(2)實現Runnable介面,重寫run函數
開啟線程:
Thread t = new Thread(對象) //創建線程對象
t.start()
(3)實現Callable介面,重寫call函數
Callable是類似於Runnable的介面,實現Callable介面的類和實現Runnable的類都是可被其它線程執行的任務。
Callable和Runnable有幾點不同:
①Callable規定的方法是call(),而Runnable規定的方法是run().
②Callable的任務執行後可返回值,而Runnable的任務是不能返回值的
③call()方法可拋出異常,而run()方法是不能拋出異常的。
④運行Callable任務可拿到一個Future對象,Future表示非同步計算的結果。它提供了檢查計算是否完成的方法,以等
待計算的完成,並檢索計算的結果.通過Future對象可了解任務執行情況,可取消任務的執行,還可獲取任務執行的結果
I. 一個程序有幾個線程, 線程是什麼東東
線程(thread, 台灣稱 執行緒)是"進程"中某個單一順序的控制流。也被稱為輕量進程(lightweight processes)。計算機科學術語,指運行中的程序的調度單位。
線程是進程中的實體,一個進程可以擁有多個線程,一個線程必須有一個父進程。線程不擁有系統資源,只有運行必須的一些數據結構;它與父進程的其它線程共享該進程所擁有的全部資源。線程可以創建和撤消線程,從而實現程序的並發執行。一般,線程具有就緒、阻塞和運行三種基本狀態。
在多中央處理器的系統里,不同線程可以同時在不同的中央處理器上運行,甚至當它們屬於同一個進程時也是如此。大多數支持多處理器的操作系統都提供編程介面來讓進程可以控制自己的線程與各處理器之間的關聯度(affinity)。
有時候,線程也稱作輕量級進程。就象進程一樣,線程在程序中是獨立的、並發的執行路徑,每個線程有它自己的堆棧、自己的程序計數器和自己的局部變數。但是,與分隔的進程相比,進程中的線程之間的隔離程度要小。它們共享內存、文件句柄和其它每個進程應有的狀態。
進程可以支持多個線程,它們看似同時執行,但互相之間並不同步。一個進程中的多個線程共享相同的內存地址空間,這就意味著它們可以訪問相同的變數和對象,而且它們從同一堆中分配對象。盡管這讓線程之間共享信息變得更容易,但您必須小心,確保它們不會妨礙同一進程里的其它線程。
J. 我在一個程序中有多線程,大概開20個線程,每個線程採集一個數據,然後每次採集完成大概1秒鍾時間
1、加鎖 寫入不能讀取 讀取不能寫入
2、不要讀取線程 採集線程在寫入的時候直接進行展示就行了。
同時 設定合理的間隔時間 避免兩個線程同時操作一條數據