if (msg.isInUse()) {
throw new IllegalStateException(msg + " This message is already in use.");
}
synchronized (this) {
…
}
return true;
}
很清楚的看到这个方法里面有锁(synchronized),既然入队列里有锁,那再看看取消息是不是也有锁?
Message next() {
…
synchronized (this) {
…
}
…
}
是的,也是存在锁的。
所以,它是通过synchronized来保证了线程的安全性。
Handler所发送的Delayed消息时间准确吗?
实际上,这个问题与线程安全性为同一个问题,多线程中线程一旦安全,时间就不能准确;时间一旦准确,线程就一定不安全。
所以,Handler所发送的Delayed消息时间基本准确,但不完全准确。
因为多个线程去访问这个队列的时候,在放入对列和取出消息的时候都会加锁,当第一个线程还没有访问完成的时候,第二个线程就无法使用,所以他实际的时间会被延迟。
我们在使用Message的时候应该怎样创建它?
由于