Tag: 同步

Java双重检查locking

我碰巧遇到了一篇最近讨论Java中的双重检查locking模式的文章,以及它的陷阱,现在我想知道如果我已经使用多年的模式的变体现在受到任何问题。 我已经看了很多关于这个主题的post和文章,并且了解了获得对部分构build的对象的引用的潜在问题,据我所知,我认为我的实现不受这些问题的影响。 以下模式有问题吗? 而且,如果不是,人们为什么不使用它? 在这个问题上我看过的任何讨论都没有看到过。 public class Test { private static Test instance; private static boolean initialized = false; public static Test getInstance() { if (!initialized) { synchronized (Test.class) { if (!initialized) { instance = new Test(); initialized = true; } } } return instance; } }

非最终字段的同步

每次我在非最终类字段上同步时,都会显示警告。 这里是代码: public class X { private Object o; public void setO(Object o) { this.o = o; } public void x() { synchronized (o) // synchronization on a non-final field { } } } 所以我改变了以下的编码方式.. public class X { private final Object o; public X() { o = new Object(); } public void x() { […]

HttpSession线程安全吗,set / get属性线程安全操作?

此外,被设置的对象是否必须是线程安全的,以确保我们知道存储在会话中的对象的状态是已知的。 另外,我正在网上阅读一些build议使用: synchronized(session) { session.setAttribute("abc", "abc"); } 这是一个有效的build议?

Java同步方法locking对象或方法?

如果我在同一个类中有两个同步方法,但是每个访问不同的variables,两个线程可以同时访问这两个方法吗? 锁是在对象上发生的,还是与synchronized方法中的variables一样具体? 例: class X { private int a; private int b; public synchronized void addA(){ a++; } public synchronized void addB(){ b++; } } 2个线程可以同时访问X类的同一个实例x.addA( )和x.addB()吗?

同步静态方法在Java中如何工作?

如果我有一个具有静态方法的util类,它将调用Hibernate函数来完成基本的数据访问。 我想知道是否使方法synchronized是确保线程安全的正确方法。 我想这样做,以防止信息访问相同的数据库实例。 不过,我现在确定下面的代码是否阻止getObjectById被所有类调用,当它被一个特定的类调用时。 public class Utils { public static synchronized Object getObjectById (Class objclass, Long id) { // call hibernate class Session session = new Configuration().configure().buildSessionFactory().openSession(); Object obj = session.load(objclass, id); session.close(); return obj; } // other static methods }

等待Shell完成,然后格式化单元格 – 同步执行一个命令

我有一个使用shell命令调用的可执行文件: Shell (ThisWorkbook.Path & "\ProcessData.exe") 可执行文件执行一些计算,然后将结果导出回Excel。 我希望能够在导出后更改结果的格式。 换句话说,我需要Shell命令首先等待,直到可执行文件完成其任务,导出数据,然后执行下一个命令进行格式化。 我尝试了Shellandwait() ,但没有多less运气。 我有: Sub Test() ShellandWait (ThisWorkbook.Path & "\ProcessData.exe") 'Additional lines to format cells as needed End Sub 不幸的是,格式化在可执行文件完成之前首先发生。 仅供参考,这里是我使用ShellandWait的完整代码 ' Start the indicated program and wait for it ' to finish, hiding while we wait. Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As […]

AFNetworking可以同步返回数据(块内)吗?

我有一个使用AFJSONRequestOperation的函数,我只希望成功后返回结果。 你能把我指向正确的方向吗? 我仍然有点无知与块和AFNetworking具体。 -(id)someFunction{ __block id data; AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id json){ data = json; return data; // won't work } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){ }]; NSOperationQueue *queue = [[NSOperationQueue alloc] init]; [queue addOperation: operation]; return data; // will return nil since the block doesn't "lock" the […]

最简单的方法来等待一些asynchronous任务完成,在Javascript中?

我想删除一些MongoDB集合,但这是一个asynchronous任务。 代码将是: var mongoose = require('mongoose'); mongoose.connect('mongo://localhost/xxx'); var conn = mongoose.connection; ['aaa','bbb','ccc'].forEach(function(name){ conn.collection(name).drop(function(err) { console.log('dropped'); }); }); console.log('all dropped'); 控制台显示: all dropped dropped dropped dropped 什么是最简单的方法来确保all dropped将被打印所有集合已被删除后? 任何第三方都可以用来简化代码。

Objective-C中的同步locking/解锁是如何实现的?

@synchronized不使用“locking”和“解锁”实现互斥? 那么它是如何locking/解锁的呢? 以下程序的输出只是“Hello World”。 @interface MyLock: NSLock<NSLocking> @end @implementation MyLock – (id)init { return [super init]; } – (void)lock { NSLog(@"before lock"); [super lock]; NSLog(@"after lock"); } – (void)unlock { NSLog(@"before unlock"); [super unlock]; NSLog(@"after unlock"); } @end int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; MyLock […]

锁如何工作?

我看到,为了使用不是线程安全的对象,我们用这样的一个锁来包装代码: private static readonly Object obj = new Object(); lock (obj) { // thread unsafe code } 那么当多个线程访问相同的代码时会发生什么(让我们假设它正在ASP.NET Web应用程序中运行)。 他们排队吗? 如果是的话,他们会等多久? 由于使用锁,对性能的影响是什么?