仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1284|回复: 19
打印 上一主题 下一主题

[学习教程] 发布一篇Java多线程初学者指南(9):为何要举行数据同步

[复制链接]
精灵巫婆 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:31:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
你希望java的IDE整合。这个是没有必要的,重要的是你理解java有多深以及怎么组织你的代码,即使没有IDE,代码照样能够编译运行的。
Java中的变量分为两类:部分变量和类变量。部分变量是指在办法内界说的变量,如在run办法中界说的变量。关于这些变量来讲,其实不存在线程之间共享的成绩。因而,它们不必要举行数据同步。类变量是在类中界说的变量,感化域是全部类。这类变量能够被多个线程共享。因而,我们必要对这类变量举行数据同步。
数据同步就是指在统一工夫,只能由一个线程来会见被同步的类变量,以后线程会见完这些变量后,其他线程才干持续会见。这里说的会见是指有写操纵的会见,假如一切会见类变量的线程都是读操纵,通常为不必要数据同步的。
那末假如不合错误共享的类变量举行数据同步,会产生甚么情形呢?让我们先看看上面的代码会产生甚么样的事变:
package test;

public class MyThread extends Thread
{
public static int n = 0;

public void run()
{
int m = n;
yield();
m++;
n = m;
}
public static void main(String[] args) throws Exception
{
MyThread myThread = new MyThread ();
Thread threads[] = new Thread[100];
for (int i = 0; i < threads.length; i++)
threads[i] = new Thread(myThread);
for (int i = 0; i < threads.length; i++)
threads[i].start();
for (int i = 0; i < threads.length; i++)
threads[i].join();
System.out.println("n = " + MyThread.n);
}
}
在实行下面代码的大概了局以下:
n = 59
看到这个了局,大概良多读者会感应奇异。这个程序明显是启动了100个线程,然后每一个线程将静态变量n加1。最初利用join办法使这100个线程都运转完后,再输入这个n值。按一般来说,了局应当是n=100。可恰恰了局小于100。
<p>
主要缺点就是:速度比较慢,没有C和C++快
海妖 该用户已被删除
沙发
发表于 2015-1-21 09:35:57 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
乐观 该用户已被删除
板凳
发表于 2015-1-22 16:57:08 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
小妖女 该用户已被删除
地板
发表于 2015-1-31 07:51:26 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
山那边是海 该用户已被删除
5#
发表于 2015-2-4 21:50:01 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
因胸联盟 该用户已被删除
6#
发表于 2015-2-10 06:49:45 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
愤怒的大鸟 该用户已被删除
7#
发表于 2015-2-28 23:52:29 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
灵魂腐蚀 该用户已被删除
8#
发表于 2015-3-1 20:35:20 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
admin 该用户已被删除
9#
发表于 2015-3-8 14:21:17 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
爱飞 该用户已被删除
10#
发表于 2015-3-16 00:39:04 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
冷月葬花魂 该用户已被删除
11#
发表于 2015-3-17 12:18:04 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
活着的死人 该用户已被删除
12#
发表于 2015-3-24 10:00:03 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
柔情似水 该用户已被删除
13#
发表于 2015-3-30 01:42:05 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
再现理想 该用户已被删除
14#
发表于 2015-4-4 03:19:01 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
简单生活 该用户已被删除
15#
发表于 2015-4-4 13:18:21 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
精灵巫婆 该用户已被删除
16#
 楼主| 发表于 2015-4-12 20:50:17 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
兰色精灵 该用户已被删除
17#
发表于 2015-4-21 19:42:59 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
再见西城 该用户已被删除
18#
发表于 2015-4-24 02:08:46 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
莫相离 该用户已被删除
19#
发表于 2015-4-26 05:10:31 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
变相怪杰 该用户已被删除
20#
发表于 2015-6-19 21:21:45 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 12:51

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表