Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的安全多线程_Java_Multithreading - Fatal编程技术网

java中的安全多线程

java中的安全多线程,java,multithreading,Java,Multithreading,我不熟悉java中的多线程 我已经阅读了一些在线参考资料,但对于如何正确实现线程并发性和解决资源访问冲突,我还不太清楚。 (比如在哪里使用synchronized和volatile,以及如何设计甚至不需要它们的代码) 有人能为您提供一些指导方针,或者提供一些有价值的在线参考资料,以实现更安全的多线程项目吗 提前感谢。没有仔细阅读您的代码,但这里有一些重要的内容,可以开始使用synchronize和volatile关键字 本质上,volatile用于指示变量的值将由不同的线程修改 声明易失性Jav

我不熟悉java中的多线程

我已经阅读了一些在线参考资料,但对于如何正确实现线程并发性和解决资源访问冲突,我还不太清楚。 (比如在哪里使用synchronized和volatile,以及如何设计甚至不需要它们的代码)

有人能为您提供一些指导方针,或者提供一些有价值的在线参考资料,以实现更安全的多线程项目吗


提前感谢。

没有仔细阅读您的代码,但这里有一些重要的内容,可以开始使用synchronize和volatile关键字

本质上,volatile用于指示变量的值将由不同的线程修改

声明易失性Java变量意味着: 这个变量的值永远不会被本地线程缓存:所有读写操作都将直接进入“主内存”;这意味着线程直接对一个(volatile)变量进行更改,而其他线程也保留该变量。每个人(每个线程)都有控制权,他们可以做出全局反映的更改。

如果变量未声明为volatile:由于另一个线程尚未将变量写回主内存,因此线程无法看到变量的最新值的问题称为“可见性”问题。一个线程的更新对其他线程不可见

声明同步Java变量意味着: Java中的同步块用Synchronized关键字标记,并在某个对象上同步在同一对象上同步的所有同步块只能有一个线程同时在其内部执行。所有试图进入同步块的其他线程都将被阻止,直到同步块内的线程退出该块

用法: 如果您想让一个count变量通过一些线程递增,那么将其设置为volatile

 public class SharedObject {
    public volatile int counter = 0;
}
但是,如果您需要计数器增量是原子的(一次一个线程),那么也要使其同步

     public synchronized void add(int value){
      this.counter += value;
}

寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参见:如何创建。使用“编辑”链接改进您的问题-不要通过评论添加更多信息。谢谢提示:您的输入无法编译(它是可运行的-不可运行的)。除此之外,你应该清楚地描述预期和实际的行为。不要把这(几乎)一团糟的事情推到我们身上,然后“想想发生了什么,告诉我如何解决它”。换句话说:多线程是复杂的。不要期望像这样在这里转储内容,并用一个简单的答案解决所有问题。多线程被认为是很难正确处理的一个原因。它是一个太大的主题,无法通过一个玩具示例和一个问题来学习。这将是一个漫长的过程。找些材料学习。从Brian Goetz的书开始。亲爱的@GhostCat,我很遗憾我没有正确地提出我的问题。我从来没有打算在这里扔一些垃圾,我珍惜任何人在这里阅读问题和提出建议的时间。我编辑了这个问题。我所包含的代码中唯一的一点就是要知道我是否朝着正确的方向前进。亲爱的@duffymo,谢谢你的建议。亲爱的@Dhiraj Gandhi,谢谢你提供的信息。