Tag: java已

同步发布顺序

我扫描了synchronized语句中的所有java 文档 ,寻找这个问题的答案而没有运气。 假设我有thread1 , thread2 , thread3尝试同时运行以下代码。 synchronized(lockObj) { doSomething(); } 假设thread1首先获取doSomething() , thread2然后thread3 ,它将阻塞并等待synchronized语句。 题 当thread1释放锁时,哪个线程将首先释放? 释放锁时适用的一般订单规则是什么?

局部变量同步的必要性

在JSON-java库( org.json.JSONArray )中,我发现这个代码片段带有一个围绕方法局部变量的synchronized块 public String toString(int indentFactor) throws JSONException { StringWriter sw = new StringWriter(); synchronized (sw.getBuffer()) { return this.write(sw, indentFactor, 0).toString(); } } 我不明白这里同步的必要性,因为StringWriter只是给定方法的本地(以及为什么同步在Buffer上)。 这里的同步是否真的有必要,如果,为什么?

Java同步方法…未同步

对于我目前的java练习,我必须从2个不同的Gmail帐户获取邮件。 我通过创建我的gmail类的新实例来完成此操作。 gmail类扩展了线程,在其中有一个同步方法readMail(),它获取邮件并打印它。 这个readMail方法由run方法在while(true)循环中调用,然后它hibernate30秒,这个想法是它每30秒获取一次邮件。 但是,synchronized方法似乎不起作用。 线程相互中断,并且该方法在其他线程中断并开始打印之前不会打印消息的所有项目。 任何建议将不胜感激。 请看下面给我带来麻烦的方法: public synchronized void readMail() throws MessagingException, IOException { Folder inbox = store.getFolder(“Inbox”); inbox.open(Folder.READ_ONLY); messages = inbox.getMessages(); // System.out.println(“No of Messages : ” + inbox.getMessageCount()); // System.out.println(“No of Unread Messages : ” // + inbox.getUnreadMessageCount()); for (int i = 0; i < inbox.getUnreadMessageCount(); i++) { System.out .println("*****************************************************************************"); System.out.println("NEW […]

在函数中通过类名同步将在扩展类中有效吗?

我在基类中有一个方法foo使用Synchronized(类名),以及两个扩展基类的类A和B. 如果我从一个实例调用foo而两个不同线程中的B实例将被同步。 这是一个示例代码: class BaseClass { void foo() { synchronized(BaseClass.class) // do something like increment count } } class A extends BaseClass { } class B extends BaseClass { } A a = new A(); B b = new B(); //in thread 1 a.foo() ; //in thread 2 b.foo() ;

在同步块内执行新线程

如果我在同步块中创建一个新线程,该块是否会保持锁定状态,直到线程执行完成为止? 如果没有,那么它什么时候会被锁定? String sLine; onClick(String line){ synchronized (lock) { sLine = line; new Thread(new Runnable() { @Override public void run() { doProcessing(Sline); }).start(); } }

同步,何时使用?

我已经开始学习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 }

原始getter / setter方法需要java synchronized关键字?

我读了一些java代码,发现了这些函数: synchronized void setConnected(boolean connected){ this.connected = connected; } synchronized boolean isConnected(){ return connected; } 我想知道同步在这里是否有意义,或者只是作者不理解synchronized关键字的需要? 我想在这里同步是没用的。 还是我弄错了?

java monitor是否包含实例变量?

是不是java中的监视器不限制对实例变量的访问,而只限制声明为synchronized的方法或者同步语句中的代码? 我已经创建了两个线程, thread y调用sync方法,它被声明为synchronized,而thread r调用unsync方法,该方法未声明为synchronized。 两者都在共享对象上调用方法。 Thread r能够修改对象s的实例变量,同时该对象s监视器或锁仍被thread y 。 是Java中的监视器不限制对实例变量的访问,并且只限制声明为synchronized的方法或同步语句中的代码? public class stuff { private int a = 10; public synchronized void sync() { long t1 = System.currentTimeMillis(); System.out .println(“Okay, I am in sync method. I will be waiting for 10 seconds. Current Time = ” + System.currentTimeMillis()); while (System.currentTimeMillis() – t1 < 10000); […]

为什么在Java中同步昂贵?

我是Java的新手,我读到Java中“synchronized”非常“昂贵”。 我想知道的是什么是昂贵的,它是如何昂贵的? 谢谢。

学习Java,使用synchronized关键字

所以我用synchronized关键字进行测试。 这是我尝试的一个例子: public class MyTest { static int i = 0; public static void main(String[] args) { new Thread(t1).start(); new Thread(t2).start(); } private static void countMe(String name){ i++; System.out.println(“Current Counter is: ” + i + “, updated by: ” + name); } private static Runnable t1 = new Runnable() { public void run() { try{ […]