如何创建线程?如何保证线程安全?

在java中如果要创建线程的话,一般有两种方式:

  • 1.继承Thread类;
  • 2.实现Runnable接口。

线程安全:

线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。

一般说来,确保线程安全的方法有这几个:竞争与原子操作、同步与锁、可重入、过度优化。
个人认为,保证线程安全,无外乎保持线程同步的方式,
如:@synchronized、NSLock、dispatch_semaphore、NSCondition、pthread_mutex、OSSpinLock。
然而:
OSSpinLock和dispatch_semaphore的效率远远高于其他。
@synchronized和NSConditionLock效率较差。
鉴于OSSpinLock的不安全,所以我们在开发中如果考虑性能的话,建议使用dispatch_semaphore。
如果不考虑性能,只是图个方便的话,那就使用@synchronized。

如何保证呢:

  • 1.使用线程安全的类;
    1. 使用synchronized同步代码块,或者用Lock锁;

由于线程安全问题,使用synchronized同步代码块 原理:当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。 另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。

    1. 多线程并发情况下,线程共享的变量改为方法局部级变量;

你可能感兴趣的:(如何创建线程?如何保证线程安全?)