您的位置:首页 > 编程语言 > Java开发

Java多线程中的final和static

2016-08-12 15:36 316 查看
看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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: