线程同步
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
当我们在程序中启动两个以上的线程时,由于并发处理的原因就会导致多个线程访问相同资源的情况,它将导致不可预测的结果。例如:多个线程同时写一个文件,这将破坏整个文件的完整性。
此时我们就需要一种同步处理机制,让多个线程在同一时刻只能有一个线程访问这个资源。它的实现原理类似锁的概念,Java中的任何对象都有一把锁,这样线程就可以对指定的对象上锁和解锁了,在同一时刻对象的锁只能被一个线程拥有。
Java语言通过synchronized
关键词提供了一种便捷的方式用于同步线程间的任务。此时你需要将共享的资源放入该区块中,下面是synchronized
语句的语法:
synchronized (objectidentifier) {
// 访问共享变量及其它共享资源
}
这里的objectidentifier
是对象的引用,我们通过对该对象进行上锁以达到线程同步的目的。现在我们先来看一个例子,此时在未使用线程同步的情况下,计数器(counter
)的打印并未按照顺序进行显示。
在线练习
{$ activeFileHint $}