第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

管理線程同步中的靜態(tài)關(guān)鍵字 - Java

管理線程同步中的靜態(tài)關(guān)鍵字 - Java

桃花長相依 2021-11-17 14:48:35
我有一個關(guān)于下面發(fā)布的代碼的問題。為什么我需要在 SumArray 對象的聲明前面加上“static”這個詞才能使這段代碼正常運行?為什么不保證(由它自己)一次為一個線程調(diào)用同步方法?事實上,如果我刪除“靜態(tài)”一詞,那么 SumArray 方法將被 2 個線程調(diào)用可互換。盡管如此,兩個線程的總和將是正確的。class SumArray {    private int sum;    synchronized int sumArray(int numbers[]) {        sum = 0;        for (int i = 0; i < numbers.length; i++) {            sum += numbers[i];            System.out.println("Current Sum for " + Thread.currentThread().getName() + " equals " + sum);            try {                Thread.sleep(2000);            } catch (InterruptedException e) {                System.out.println("Main Thread has been stopped");            }        }        return sum;    }}class MyThread implements Runnable {    Thread t;    int a[];    int ans;    static SumArray sa = new SumArray();    MyThread(String name, int numbers[]) {        t = new Thread(this, name);        t.start();        a = numbers;    }    public void run() {        System.out.println(t.getName() + " is starting.");        ans = sa.sumArray(a);        System.out.println("Final Sum for " + t.getName() + " equals " + ans);        System.out.println(t.getName() + " has been finished.");    }}public class Main {    public static void main(String[] args) {        int a[] = { 1, 2, 3, 4, 5 };        new MyThread("Thread 1", a);        new MyThread("Thread 2", a);    }}代碼的示例結(jié)果 static SumArray sa = new SumArray();Thread 2 is starting.Thread 1 is starting.Current Sum for Thread 2 equals 1Current Sum for Thread 2 equals 3Current Sum for Thread 2 equals 6Current Sum for Thread 2 equals 10Current Sum for Thread 2 equals 15Current Sum for Thread 1 equals 1Final Sum for Thread 2 equals 15Thread 2 has been finished.Current Sum for Thread 1 equals 3Current Sum for Thread 1 equals 6Current Sum for Thread 1 equals 10Current Sum for Thread 1 equals 15Final Sum for Thread 1 equals 15Thread 1 has been finished.結(jié)果與 SumArray sa = new SumArray();
查看完整描述

1 回答

?
眼眸繁星

TA貢獻1873條經(jīng)驗 獲得超9個贊

因為在線程內(nèi)部您創(chuàng)建了一個新對象并且它有自己的 sumArray 方法。當(dāng)它是靜態(tài)時,整個 jvm 中只有一個 sumArray 函數(shù)屬于類,而不是對象


查看完整回答
反對 回復(fù) 2021-11-17
  • 1 回答
  • 0 關(guān)注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號