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

 我来答
lgw937

2021-10-22 · 每个人的生活都是一种修行
lgw937
采纳数:487 获赞数:407

向TA提问 私信TA
展开全部

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

  • 1.继承Thread类;

  • 2.实现Runnable接口。

  • 线程安全:

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

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

    如何保证呢:

  • 1.使用线程安全的类;

  • 使用synchronized同步代码块,或者用Lock锁;

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

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



  • 作者:squirrels
    链接:https://www.jianshu.com/p/221df4cd63da
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

葱头454
2021-10-22 · TA获得超过183个赞
知道答主
回答量:1.5万
采纳率:2%
帮助的人:614万
展开全部
在java中如果要创建线程的话,一般有两种方式: 1)继承Thread类;2)实现Runnable接口。 在java中如何保证线程安全? 一般说来,确保线程安全的方法有这几个:
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
圈内早知道

2021-10-22 · 专注为您呈现不一样的圈内事。感谢关注
圈内早知道
采纳数:757 获赞数:1290

向TA提问 私信TA
展开全部
一、线程安全在三个方面体现

1.原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作,(atomic,synchronized);

2.可见性:一个线程对主内存的修改可以及时地被其他线程看到,(synchronized,volatile);

3.有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果一般杂乱无序,(happens-before原则)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式