當前位置:首頁 » 編程語言 » java多線程變數

java多線程變數

發布時間: 2024-06-28 13:28:38

java多線程 全局變數

你這個全局變數是static變數嗎?必須是static才是全局的

然後要保證這個調用全局變數的類和那個線程是在同一個進程

然後要考慮執行的順序,保證賦值的線程先執行

② java多線程共享變數

兩個線程同時獲取變數,
獲取之後.第一個線程++操作,然後進入睡眠.
這時,第二個線程,也獲取到了,做--操作.睡眠.
第一個線程醒來列印的是做過2次運算的數據(++,--)所以是0
第二線程也一樣.
這涉及到多線程安全問題.

③ 基礎Java題 試編寫一個多線程的程序:啟動4個線程。其中兩個循環10次,每次將某全局變數加1,另兩個循環1

publicclassDay18_A{
publicstaticvoidmain(String[]args)throwsInterruptedException{
Recounrec=Recoun.getRec();
Thread[]枯蘆trr=newThread[4];
for(inti=0;i<4;i++){
trr[i]=newThread(newNumberTest(rec,i),"線程"+(i+1)+": ");
}
for(Threadthread:trr){
thread.start();
}
for(Threadthread:trr)沒純帶{
thread.join();
}
System.out.println("所有線程結束褲虧查看結果:"+rec.getCount());
}
}

{
privateRecounre;
privateintn;
NumberTest(Recounr,inti){
this.re=r;
this.n=i;
}
publicvoidrun(){
for(inti=0;i<10;i++){
re.method(n);
}
}
}
classRecoun{
privateintcount=0;
privateRecoun(){
}
privatestaticfinalRecounrec=newRecoun();
publicstaticRecoungetRec(){
returnrec;
}
publicsynchronizedvoidmethod(inti){
if(i%2==0){
System.out.println(Thread.currentThread().getName()+(count++));
}else{
System.out.println(Thread.currentThread().getName()+(count--));
}
}
publicsynchronizedintgetCount(){
returncount;
}
}

④ Java兩個線程操作一個變數,為什麼變數的值會不一樣呢

如樓下所說,線程同步的問題。
除了了使用synchronized。

還可以使用原子類型,例如AtomicInteger,參見

http://dlc.sun.com.edgesuite.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html/zh_CN/api/index.html

⑤ java 多線程 同時操作一個變數 高分懸賞

ArrayList不是線程安全的野遲 所以 synchronized 必須有 這一點是關鍵,其他的都是浮雲。還有 兩個線程sleep一會更好 否則 這個猛喊跟死循環一樣了 機器受不了啊!。
public class Test {

public static List<String> list = new ArrayList<String>();

public static void main(String[] args) {
myThreadClass1 thread1 = new myThreadClass1();
myThreadClass2 thread2 = new myThreadClass2();
Thread t1 = new Thread(thread1);
Thread t2 = new Thread(thread2);
t1.start();
t2.start();
}
}

class myThreadClass1 implements Runnable {
public void run() {
while (true) {//枝脊野 這就不要寫1 ==1 了
synchronized (Test.class) {
System.out.println("add!!!!");
Test.list.add("123");
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

class myThreadClass2 implements Runnable {
public void run() {
while (true) {
synchronized (Test.class) {
Iterator it = Test.list.iterator();
// 循環里remove會出沖突異常的
List list2 = new ArrayList();
while (it.hasNext()) {
Object obj = it.next();
System.out.println("remove:" + obj);
list2.add(obj);
}
// you can do anything with list2
// avoid java.util.
Test.list.clear();
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

⑥ java多線程有幾種實現方法,都是什麼同步有幾種實現方法,都是什麼

java中多線程的實現方法有兩種:1.直接繼承thread類;2.實現runnable介面;同步的實現方法有五種:1.同步方法;2.同步代碼塊;3.使用特殊域變數(volatile)實現線程同步;4.使用重入鎖實現線程同步;5.使用局部變數實現線程同步

其中多線程實現過程中需注意重寫或者覆蓋run()方法,而對於同步的實現方法中使用較常使用的是利用synchronized編寫同步方法和代碼塊。

熱點內容
win8的文件夾選項在哪 發布:2024-06-30 23:12:58 瀏覽:990
androidadtmac下載 發布:2024-06-30 23:08:09 瀏覽:152
qq空間訪問量排行 發布:2024-06-30 23:03:06 瀏覽:593
皓影什麼配置座椅通風 發布:2024-06-30 23:01:27 瀏覽:381
看手機解壓 發布:2024-06-30 23:01:27 瀏覽:838
安卓手機的系統怎麼升級 發布:2024-06-30 23:01:25 瀏覽:264
apktool回編譯失敗怎麼回事 發布:2024-06-30 22:53:16 瀏覽:928
sql獲取時間的日期 發布:2024-06-30 22:51:57 瀏覽:729
亞索編程的 發布:2024-06-30 22:35:35 瀏覽:880
axis2上傳文件 發布:2024-06-30 22:26:04 瀏覽:17