草庐IT

同步Socket

全部标签

java - 对象同步

当同步块(synchronizedblock)用于对象实例上的同步时,线程会竞争进入对象的隐式监视器。一旦任何特定线程进入监视器,任何其他线程都必须等待进入它。然后synchronized(object){//somecodehere//nofunctioncall}不得强制获取任何特定类型的对象。因此,这里可以使用任何对象类型,因为每个对象都有其隐式监视器。请回复我是真的吗? 最佳答案 是的,每个Java对象都可以充当监视器。由于这是一个如此简短的答案,作为奖励,这是一篇有趣的读物:DoestheJVMcreateamutexfo

java - 局部变量同步的必要性

在JSON-java库(org.json.JSONArray)中,我发现这段代码片段在方法局部变量周围有一个synchronizedblockpublicStringtoString(intindentFactor)throwsJSONException{StringWritersw=newStringWriter();synchronized(sw.getBuffer()){returnthis.write(sw,indentFactor,0).toString();}}我不明白这里同步的必要性,因为StringWriter只是给定方法的本地(以及为什么同步在Buffer上)。这里真

java - 同步 JList 和 JComboBox?

在JavaSwing中,JList和JComboBox在数据方面同步的最佳方式是什么,即在任何给定的时间点?基本上,如果我向一个添加项目(或从中删除项目),另一个应该会自动反射(reflect)更改。我尝试过以下操作,但似乎不起作用:JListlist=newJList();JComboBoxcomboBox=newJComboBox();DefaultListModellistModel=newDefaultListModel();//additemstolistModel...list.setModel(listModel);comboBox.setModel(newDefault

java - 我什么时候应该同步我的类的方法?

我正在考虑创建一个类(如String、StringBuffer等)。这可以在单线程和多线程环境中使用。我不知道开发人员可能正在使用哪种环境。预见到最坏的情况,我可以同步。但是,1.同步会影响性能。2.没有同步就不是线程安全的。所以,我有两个选择。保持类不同步-但使用此类的开发人员需要在适当的时候同步它。拥有所有同步方法-并降低性能。我已经看到Java中的许多(如果不是全部,例如ArrayListoverVector)类已经进化为采用第一种方法。在为我的类(class)决定这两个选项之前,我需要考虑哪些事项?或者换一种说法,只有当我肯定知道bar可以用于多线程环境,不应同时运行?编辑所以

java - 如果我从我的同步方法调用非同步方法是非同步方法线程安全的吗?

我从我的同步方法中调用了noonsynchronized方法,它是线程安全的吗?我有如下两种方法:publicclassMyClass{voidsynchronizeddoSomething1(){doSomething2();}voiddoSomething2(){//willthisblockofcodebesynchronizedifcalledonlyfromdoSomething1??}} 最佳答案 如果doSomething2()仅从doSomething1()调用,则它只会被单个线程调用用于的单个实例我的类(class

java - 当我以静态方式同步块(synchronized block)调用 wait() 时,为什么 Java 抛出 java.lang.IllegalMonitorStateException?

我不明白为什么Java会在这段代码中从主题中抛出异常。有人能给我解释一下吗?classWaitimplementsRunnable{publicvoidrun(){synchronized(Object.class){try{while(true){System.out.println("Beforewait()");wait();System.out.println("Afterwait()");}}catch(InterruptedExceptione){e.printStackTrace();}}}}publicclassObjectMethodInConcurency{publ

java - 构造函数中的同步块(synchronized block)有什么用?

我们不能使构造函数synchronized,但可以在构造函数中编写synchronized。什么情况下会出现这样的要求?我被逗乐了。packagecom.simple;publicclassTest{publicTest(){synchronized(this){System.out.println("Iamcalled...");}}publicstaticvoidmain(String[]args){Testtest=newTest();System.out.println(""+test);}@OverridepublicStringtoString(){return"Test[

java - 如何在 setter 在 Java 中工作时同步 getter

我有一个多线程应用程序,它使用一个提供列表的静态类。我希望静态类的getter可以自由工作(不相互同步)但是当setter工作时我希望所有getter都被锁定并等待setter的工作完成。我不想在一起调用setter/getter时锁定setter/getter,因为这会大大降低性能。Getter每天被调用1,000,000次,而setter每天只应该工作一次。 最佳答案 考虑使用java.util.concurrent.locks.ReadWriteLock实现,例如ReentrantReadWriteLock(参见javadoc

Synchronized详解、同步互斥自旋锁分析及MonitorJVM底层实现原理

状态对象如果一个对象有被修改的成员变量被称为有状态的对象相反如果没有可被修改的成员变量称为无状态的对象。示例:publicclassMyThreadTest{publicstaticvoidmain(String[]args){Runnabler=newMyThread();Threadt1=newThread(r);Threadt2=newThread(r);t1.start();t2.start();}}classMyThreadimplementsRunnable{/***如果一个对象有被修改的成员变量被称为有状态的对象*相反如果没有可被修改的成员变量称为无状态的对象**由于两个线程同时

java - 同步对 Volatile 字段的写入访问(廉价读写 block )

假设我有以下类(class),将大量阅读,但只是偶尔写。它将在多线程网络应用程序中使用,因此需要线程安全:publicclassFoo{privatevolatileStringfoo;publicStringgetFoo(){returnfoo;}publicsynchronizedStringsetFoo(Stringin){this.foo=in;}}Java并发(http://www.ibm.com/developerworks/java/library/j-jtp06197/index.html)声明这是一种脆弱的方式来保护写访问,同时提高读访问。什么是这种模式的更强大的替代