| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package org.chromium.base; |
| |
| /** |
| * NonThreadSafe is a helper class used to help verify that methods of a |
| * class are called from the same thread. |
| */ |
| public class NonThreadSafe { |
| private Long mThreadId; |
| |
| public NonThreadSafe() { |
| ensureThreadIdAssigned(); |
| } |
| |
| /** |
| * Changes the thread that is checked for in CalledOnValidThread. This may |
| * be useful when an object may be created on one thread and then used |
| * exclusively on another thread. |
| */ |
| @VisibleForTesting |
| public synchronized void detachFromThread() { |
| mThreadId = null; |
| } |
| |
| /** |
| * Checks if the method is called on the valid thread. |
| * Assigns the current thread if no thread was assigned. |
| */ |
| @SuppressWarnings("NoSynchronizedMethodCheck") |
| public synchronized boolean calledOnValidThread() { |
| ensureThreadIdAssigned(); |
| return mThreadId.equals(Thread.currentThread().getId()); |
| } |
| |
| private void ensureThreadIdAssigned() { |
| if (mThreadId == null) mThreadId = Thread.currentThread().getId(); |
| } |
| } |