线程中全局变量和成员变量

来源:互联网 发布:抱枕淘宝 编辑:程序博客网 时间:2024/06/02 19:05

在线程中,run方法中调用的变量不同,那么程序运行的结果也不同,变量属于成员变量还是属于局部变量,要处理对象的变量还是方法中的变量会导致结果的差异性。


1)线程处理了全局变量

package com.medivh.thread;public class ThreadTest3{public static void main(String[] args){Runnable f = new First();Thread t = new Thread(f);Thread t1 = new Thread(f);t.start();t1.start();}}class First implements Runnable{int i;public void run(){    int i=0;    while (true){System.out.println("First"+   this.i++);try{Thread.sleep((long) Math.random()*1000);} catch (InterruptedException e){e.printStackTrace();}if(10==this.i){break;}}}}
测试结果:

First0
First1
First2
First3
First4
First5
First6
First7
First8
First9
至始至终只有一个First对象,而方法中调用的是this.i 那么就是全部变量,所以当全局变量i==10时,run方法结束。

2)线程调用局部变量

package com.medivh.thread;public class ThreadTest3{public static void main(String[] args){Runnable f = new First();Thread t = new Thread(f);Thread t1 = new Thread(f);t.start();t1.start();}}class First implements Runnable{int i;public void run(){    int i=0;    while (true){System.out.println("First"+   i++);try{Thread.sleep((long) Math.random()*1000);} catch (InterruptedException e){e.printStackTrace();}if(10==i){break;}}}}

测试结果:

First0
First1
First2
First3
First4
First5
First6
First7
First8
First9
First0
First1
First2
First3
First4
First5
First6
First7
First8
First9


run方法中调用的this.i的全局变量,而只调用的方法中的变量,而方法执行了两次,所以结果有20条。


0 0
原创粉丝点击