|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。
volatile关头字信任懂得Java多线程的读者都很分明它的感化。volatile关头字用于声明复杂范例变量,如int、float、boolean等数据范例。假如这些复杂数据范例声明为volatile,对它们的操纵就会酿成原子级其余。但这有必定的限定。比方,上面的例子中的n就不是原子级其余:
package mythread;
public class JoinThread extends Thread
{
public staticvolatileint n = 0;
public void run()
{
for (int i = 0; i < 10; i++)
try
{
n = n + 1;
sleep(3); // 为了使运转了局更随机,提早3毫秒
}
catch (Exception e)
{
}
}
public static void main(String[] args) throws Exception
{
Thread threads[] = new Thread[100];
for (int i = 0; i < threads.length; i++)
// 创建100个线程
threads[i] = new JoinThread();
for (int i = 0; i < threads.length; i++)
// 运转方才创建的100个线程
threads[i].start();
for (int i = 0; i < threads.length; i++)
// 100个线程都实行完后持续
threads[i].join();
System.out.println("n=" + JoinThread.n);
}
}
假如对n的操纵是原子级其余,最初输入的了局应当为n=1000,而在实行下面积代码时,良多时侯输入的n都小于1000,这申明n=n+1不是原子级其余操纵。缘故原由是声明为volatile的复杂变量假如以后值由该变量之前的值相干,那末volatile关头字不起感化,也就是说以下的表达式都不是原子操纵:
n = n + 1;
n++;
<p>
而学习JAVA我觉得最应该避免的就是:只学习,不思考,只记忆,不实践! |
|