这是我的代码:
private int count = 0;
public synchronized void increment() {
count++;
}
public void doWork() throws InterruptedException {
Thread t1 = new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 5; i++) {
increment();
System.out.println(count+" "+Thread.currentThread().getName());
}}});
Thread t2 = new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 5; i++) {
increment();
System.out.println(count+" "+Thread.currentThread().getName());
}}});
t1.start();
t2.start();
}
这是我的输出:
2 Thread-1
2 Thread-0
3 Thread-1
5 Thread-1
6 Thread-1
4 Thread-0
8 Thread-0
9 Thread-0
7 Thread-1
10 Thread-0
我的理解increment
是synchronized
。因此,应该首先increment
一个号码,然后松开lock
,然后给lock
到线t1
或t2
。所以,一次应该有increment
一个数字,对吧?
但是为什么我的代码一次是incrementing
两个或三个数字?我做错什么了吗(我是新手)?
虽然count++;
确实不是同步System.out.println(count+" "+Thread.currentThread().getName());
的,但是它访问count
变量。
即使您同步访问权限,它也无济于事,因为下一种情况仍然可能:
2
2
要解决此问题,您需要增加并在同一同步部分中打印。例如你可以把System.out.println(count+" "+Thread.currentThread().getName());
进入increment
的方法。
问题内容: 看来AngularJS的不起作用。它不适用于数字字符串。难道我做错了什么?我应该使用吗? 我需要一些东西来查看字符串是否是一个数字(实际上是一个数字),除非我乘以1,否则我不会这么做,但是如果我这样做,那么它将始终为真。另外是不是一个数字(定义)等应该返回false。 问题答案: 在 JavaScript中 ,。 例如,如果需要将 字符串 识别为 Number ,则将其转换为 Numb
问题内容: 我试图通过使用该方法销毁所有会话变量,但是在使用此方法之后,这些值不会被销毁。 为什么不工作? 还有其他方法可以销毁PHP中的会话吗? 问题答案: 使用后,会话将在后台被销毁。由于某种原因,这不会影响已为此请求填充的中的值,但在以后的请求中将为空。 如果需要,您可以手动清除()。
问题内容: 为什么这不起作用? 实际上,我所有的元素都不可见。如果我在选择器中删除对的引用,则确实会显示div中的最后一个,但这不是我想要的。 当然,我只能一直保留一个,但这只是一个reveal.js演示文稿,我无法控制JavaScript。 如何选择带有类的div中的最后一个元素?我不想为此使用JavaScript。 问题答案: 您的问题是,您正在阅读并认为它可以用作选择器,而实际上它 仅 表示
问题内容: 我在Ubuntu Hardy VPS上做了一份计划工作,只有一半可以工作,我不知道为什么。这项工作是一个Ruby脚本,它使用mysqldump备份Rails应用程序使用的MySQL数据库,然后将其压缩并使用SFTP上传到远程服务器。 gzip文件已成功创建并复制,但始终为零字节。但是,如果我直接从命令行运行cron命令,它将运行完美。 这是cron工作: 这是datadump.rb:
问题内容: 我试图在sed的正则表达式中使用它,但是它不起作用: 但这是可行的: 问题答案: 是一个开关,而不是正则表达式宏。如果要使用一些预定义的“常量”而不是表达式,请尝试运行以下代码:
问题内容: 谁能解释两个我为什么这些代码不输出相同的结果(两个代码之间的唯一区别是run()方法)? 注意:第一个代码似乎没有做任何锁定! 第一个代码: 第二个代码: 该代码完全按照预期工作 问题答案: 第一码 事实是,您有3个线程实例,每个线程运行它自己的method实例。但是总是只有一个线程想要与其自己的方法同步,因此它将在线程希望其运行时运行。这根本没有同步。 第二码 您也有3个线程实例,但