Java多线程中的final和static

看Android的多线程发现其实是Java的多线程。我找了一本Java编程思想学习Java的并发机制。写了一个demo,遇到一些问题,虽然最后想明白了,但是也暴露了我的Java基础差劲的事实。之后我会通过写博客的方式来提高Java水平。现在说一下我的问题吧。
问题链接

这个问题最后答案的核心是:
Java的静态变量在应用时只会初始化一次,但是可以多次赋值。

下面贴出两个回答的代码片段来说明这个问题:

 static int d=20;
 final static int STATIC_FINAL_INT=d++;
 //相当于
 static int d=20;
 final static int STATIC_FINAL_INT=d;
 d=d+1;
 //d是静态变量属于类变量,所以第二次及之后不会执行 static int c=20;
 //STATIC_FINAL_INT 是静态变量,所以其初始语句不会继续执行。
 //fina staticl int STATIC_FINAL_INT=d++;
 //属于初始化,只执行一次,所以STATIC_FINAL_INT的值不会改变;
 //d=d+1属于STATIC_FINAL_INT的初始化语句,所以不会继续执行。所以d的值不会改变;
 static int c=20;
 final int staticInt=c++;
 //相当于
 static int c=20;
 final int finalInt=c;
 c=c+1;
 //c是静态变量属于类变量,所以第二次及之后不会执行 static int c=20;
 //finalInt不是静态变量,所以其初始语句会继续执行。
 //final int finalInt=c++;属于初始化,不止执行一次,
 //所以finalInt的值会一直增大;
 //c=c+1属于finalInt的初始化语句,所以会继续执行。所以c的值一直会一直增大;

Thread.run()和Thread.start()区别
1) start:
  用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。
2) run:
  run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值