Tag: 同步

java中的最终变量和同步块

Java中的最终变量是什么? 例如:如果我写final int temp; 在函数中final关键字的含义是什么? 此外,我什么时候想使用最终变量(作为类变量和函数变量)? 为什么同步块中的变量必须声明为final?

JAVA线程(不同堆栈)同步

我有一个关于由多个线程执行的代码同步的问题: 据我所知,每个线程都有自己的堆栈,因此,非静态变量存在于每个线程的内存中的不同位置(对于X线程,存在包含所有非静态变量的X堆栈)。 那么为什么需要同步任何东西呢? 我的意思是,如果线程执行的代码包含一些类变量v1,那么每个线程都有自己的v1实例(不同的内存地址),没有其他线程可以“触摸”它…是不是这样?

Java + Eclipse:同步stdout和stderr

我用Eclipse。 当我有这样的应用程序时: write 20 times ‘Hello World\n’ to stdout write ‘ERROR\n’ to stderr write 5 times ‘Hello World\n’ to stdout 输出看起来很多次像这样: Hello World Hello World Hello World Hello World Hello World Hello World … Hello World Hello World Hello World ERROR 有没有办法同步这两个输出流? 当然,在20次Hello World块之后没有等待几毫秒,并在打印ERROR后等待几毫秒。

Java中向量中的同步

Java中vector的含义是线程安全和同步,它是如何使线程安全的。 我正在查看实施的内部细节

同步,何时使用?

我已经开始学习Java中的并发和线程。 我知道同步的基础知识(即它的作用)。 从概念上讲,我理解它提供了对Java中多个线程的共享资源的互斥访问。 但是当面对像下面这样的例子时,我很困惑,让它同步是否是一个好主意。 我知道应该同步代码的关键部分,不应该过度使用此关键字,否则会影响性能。 public static synchronized List sortA(AClass[] aArray) { List aObj = getList(aArray); Collections.sort(aObj, new AComparator()); return aObj; } public static synchronized List getList(AClass[] anArray) { //It converts an array to a list and returns }

等待Timer在Java中完成

我正在使用java.util.Timer来安排定期任务。 有一次,我想关闭它, 等待它完成 。 Timer.cancel()将阻止任何未来的任务运行。 如何确保当前没有任何任务正在运行(或等待它们,如果它们是?) 我可以引入外部同步机制,但我不知道它们如何涵盖所有情况。 例如,如果我在任务中的某个监视器上进行同步,我仍然会错过任务刚刚开始执行但没有使用监视器的情况。 等待所有任务真正完成的建议做法是什么,包括当前正在运行的任务?

synchronized对象设置为null

我有两个线程Thread2和Thread2 //Within Thread1 synchronized(obj1) { obj1 = null; } //Within Thread2 synchronized(obj1) { do something } 如果jvm首先执行thread1并将obj1设置为null,那么thread2会立即看到该更改还是需要时间并且jvm仍然可以运行thread2 synchronized块,因为obj1还不是null?

同步方法以递归方式调用自身。 这打破了吗?

这个问题的关键是要说明Java没有像我预期的那样工作。 您希望以下代码如何表现? public class SynchTester { private static SynchTester synchTester; public synchronized static SynchTester getSynchTester(){ if(synchTester==null){ synchTester = new SynchTester(); } return synchTester; } private SynchTester() { SynchTester myTester = getSynchTester(); } public static void main(String[] args) { SynchTester tester = SynchTester.getSynchTester(); } } 我希望它挂起一个死锁等待递归完成,但它会抛出StackOverflow。 显然,synchronized不会阻止访问同一个线程。 这是一个错误吗?

同步关键字内部实现

在进入对象的同步方法后,JVM如何确保线程获得锁定?

我们是否同步最终的实例变量? 如果是,那么使用是什么?

我想知道我们是否同步最终的实例变量。 由于变量是最终的,因此价值不会发生变化。 任何人都能解释一下吗?