A. java用多線程實現累加求和
class Thread_test extends Thread
{
int number;
public static int sum;
public Thread_test(int n) //構造函數
{
number=n;
}
public static synchronized void add(int num){ //同步方法
sum += num;
}
public void run()
{
int count=0;
for(int i=0;i<10;i++)
{
count+=number+i;
}
System.out.println("The "+((int)number/10+1)+" time: "+count);
add(count);
}
}
public class Main{
public static void main(String args[]) {
Thread_test test[] = new Thread_test[10];
for (int i = 0; i < 10; i++) {
test[i] = new Thread_test(i*10+1);
test[i].start();
try {
test[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Total is "+Thread_test.sum);
}
}
B. 如何在c盤中查看java線程數
Windows
通過任務管理器查看進程信息
在進程頁簽中查看Java進程,我是idea啟動,因此可以在idea下查看相關進程
此外可以在詳細信息頁簽下Ctrl+f搜索java
通過控制台查看進程信息
進入CMD,鍵入tasklist,可以查看所有的進程信息,包括進程ID、內存使用情況
查看Java相關的進程,可以添加過濾條件 tasklist | findstr "java" ,需要注意windows中字元串需要使用雙引號,要不就不加也是可以的
如果是在IDEA中啟動程序,可以借用idea的Terminal終端執行命令
taskkill 殺死進程
殺死進程使用taskkill /pid 指定進程id,如果無法殺死,可以嘗試強制殺死taskkill /pid 進程id -t -f
可以看到idea控制台中進程已結束
通過tasklist | findstr 進程id 已經無法查詢到該進程,說明進程終止成功
C. java 多線程 求和
幫你幫到底,你湊合著看看吧
package test;
import java.io.*;
class testthread
extends Thread {
int b[] = null;
public testthread(int[] a) {
b = a;
}
public void run() {
int sum = 0;
for (int i = 0; i < b.length; i++) {
sum = sum + b[i];
}
System.out.println(sum);
thread.tnumInc(sum);
}
}
public class thread {
private static int ready = 0;
private static int tnum = 0;
private static int SUM = 0;
static synchronized void tnumInc(int p)
{
ready++;
SUM += p;
if(ready>=tnum){
System.out.println(SUM);
}
}
/**
* @param args
*/
public static void main(String args[]) {
// TODO 自動生成方法存根
try {
System.out.print("輸入線程數 p(p>=2):");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String A = (String) br.readLine();
int p = Integer.parseInt(A);
tnum = p;
System.out.print("輸入求和數 n:");
BufferedReader cr = new BufferedReader(new InputStreamReader(System.in));
String B = (String) cr.readLine();
String x[] = B.split(" ");
int[] n = new int[x.length];
for (int i = 0; i < x.length; i++) {
n[i] = new Integer(x[i]).intValue();
}
int c = n.length / p;
int a[][] = new int[p][c]; //定義一個多維數組
int b = 0;
for (int i = 0; i < p; i++) //將n[]中元素賦值給多維數組
for (int j = 0; j < c; j++) {
a[i][j] = n[b];
b++;
}
for (int i = 0; i < p; i++) { //測試多維數組輸出
for (int j = 0; j < c; j++) {
System.out.print(a[i][j] + " ");
}
System.out.println();
}
for (int i = 0; i < p; i++) //創建線程
new testthread(a[i]).start();
}
catch (IOException e) {}
}
}
隨便寫寫,沒有測試過。你自己調調看吧。
大概思路就是給一個方法合並結果,並對已經完成的thread進行計數
當完成的thread的數量==總數的時候,最後結果就出來了
D. java 如何獲得線程池中正在執行的線程數
java中線程池的監控可以檢測到正在執行的線程數。
通過線程池提供的參數進回行監控。線程池裡有一答些屬性在監控線程池的時候可以使用
taskCount:線程池需要執行的任務數量。
completedTaskCount:線程池在運行過程中已完成的任務數量。小於或等於taskCount。
largestPoolSize:線程池曾經創建過的最大線程數量。通過這個數據可以知道線程池是否滿過。如等於線程池的最大大小,則表示線程池曾經滿了。
getPoolSize:線程池的線程數量。如果線程池不銷毀的話,池裡的線程不會自動銷毀,所以這個大小隻增不+ getActiveCount:獲取活動的線程數。
通過擴展線程池進行監控。通過繼承線程池並重寫線程池的beforeExecute,afterExecute和terminated方法,我們可以在任務執行前,執行後和線程池關閉前干一些事情。如監控任務的平均執行時間,最大執行時間和最小執行時間等。這幾個方法在線程池裡是空方法。如:
protected void beforeExecute(Thread t, Runnable r) { }
E. JAVA多線程累加
ExecutorServicethreadPool2=Executors.newFixedThreadPool(10);
ExecutorCompletionService<Integer>executorCompletionService=newExecutorCompletionService<Integer>(
threadPool2);
for(inti=0;i<10;i++){
executorCompletionService.submit(newCallable<Integer>(){
@
publicIntegercall()throwsException{
intsum=0;
for(intj=0;j<10;j++){
sum+=newRandom().nextInt(1000);
}
System.out.println("num:"+sum);
returnsum;
}
});
}
intsum=0;
for(inti=0;i<10;i++){
try{
intnum=executorCompletionService.take().get();
sum+=num;
}catch(InterruptedExceptione){
e.printStackTrace();
}catch(ExecutionExceptione){
e.printStackTrace();
}
}
System.out.println("sum:"+sum);
F. java多線程,要求三個線程,一個從0開始計數,一個存放計數,一個輸出
將計數、存放、輸出三個方法中的目標變數進行同步。就可以了
也就是說,當3個線程同時使用數據時,讓它們排個隊,一個一個來。
G. JAVA採用實現Runnable介面的多線程技術,用50個線程,生成10000個[1-1000]間的隨機整數。
public class RandomNumber implements Runnable {
private final byte[] lock; // 同步對象鎖
private Random random; // 用於生成隨機數
private int sum; // 用於計算產生的隨機數總數
public RandomNumber() {
lock = new byte[1];
random = new Random();
}
@Override
public void run() {
while (true) {
int rd = random.nextInt(1001); // 產生0 - 10000的隨機數
if (rd == 0) {
continue;
} else {
if (sum >= 10000) {
return;
}
try {
Thread.sleep(1); // 為了效果更明顯,當前線程睡1毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock) {
// 獲取到對象鎖之後,需要判斷sum的大小,因為此時sum可能已經為10000了
if (sum < 10000) {
sum++;
System.out.println(Thread.currentThread().getName()
+ " - 第" + sum + "個隨機數:" + rd);
}
}
}
}
}
// main測試函數
public static void main(String[] args) throws Exception {
RandomNumber rn = new RandomNumber();
// 循環產生50個線程
for (int i = 0; i < 50; i++) {
new Thread(rn).start();
}
}
}
有問題再追問,一起學習探討
H. 鍦╦ava涓鎬庢牱緇熻′竴涓綰跨▼鎵ц岀殑嬈℃暟鍜屼笉鑳芥墽琛岀殑嬈℃暟
鎬濊礬錛
鍒涘緩綰跨▼緇ф壙綰跨▼綾繪垨鑰呭疄鐜扮嚎紼嬫帴鍙
閲嶅啓run鏂規硶
鍦╮un鏂規硶閲岄潰鍐檉or寰鐜錛
寰鐜璇鍙ュ潡涓鎵撳嵃綰跨▼綾葷殑闈欐佹柟娉.currentthread().getname(錛
+寰鐜鐨勮嚜澧炲箋
錛屼富綰跨▼鍒涘緩鑷瀹氫箟瀵硅薄瀹炰緥銆
璋冪敤start錛堬級鏂規硶ok銆併