JAVA-Android-多线程实现方式及并发与同步,系统学Android从零开始

本文详细介绍了Java Android中多线程的实现方式,包括wait(), sleep(), notify(), allnotify(), join(), Synchronized等方法的作用,以及线程状态的转换。同时,阐述了并发与同步的基础概念,如并行、并发、线程安全、线程同步、原子性、可见性和有序性。此外,重点讲解了Synchronized关键字在方法和同步块中的应用,并对比了Volatile和ReentrantLock等同步机制。文章最后讨论了局部变量同步的ThreadLocal使用,强调在面试中理解和表达这些概念的重要性。" 102172948,46905,使用fetch_csv与Google Drive集成进行数据分析,"['数据读取', '数据处理', 'Python', '回测', '量化交易']
摘要由CSDN通过智能技术生成

###线程状态
1、wait()。使一个线程处于等待状态,并且释放所有持有对象的lock锁,直到notify()/notifyAll()被唤醒后放到锁定池(lock blocked pool ),释放同步锁使线程回到可运行状态(Runnable)。

2、sleep()。使一个线程处于睡眠状态,是一个静态方法,调用此方法要捕捉Interrupted异常,醒来后进入runnable状态,等待JVM调度。

3、notify()。使一个等待状态的线程唤醒,注意并不能确切唤醒等待状态线程,是由JVM决定且不按优先级。

4、allnotify()。使所有等待状态的线程唤醒,注意并不是给所有线程上锁,而是让它们竞争。

5、join()。使一个线程中断,IO完成会回到Runnable状态,等待JVM的调度。

6、Synchronized()。使Running状态的线程加同步锁使其进入(lock blocked pool ),同步锁被释放进入可运行状态(Runnable)。

注意:当线程在runnable状态时是处于被调度的线程,此时的调度顺序是不一定的。Thread类中的yield方法可以让一个running状态的线程转入runnable。

###基础概念

1、 并行。多个cpu实例或多台机器同时执行一段代码,是真正的同时。
2、并发。通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层面不是真正的同时。
3、线程安全。指在并发的情况之下,该代码经过多线程使用,线程的调度顺序不影响任何结果。线程不安全就意味着线程的调度顺序会影响最终结果,比如某段代码不加事务去并发访问。
4、线程同步。指的是通过人为的控制和调度,保证共享资源的多线程访问成为线程安全,来保证结果的准确。如某段代码加入@synchronized关键字。线程安全的优先级高于性能优化。
5、原子性。一个操作或者一系列操作,要么全部执行要么全部不执行。数据库中的“事物”就是个典型的院子操作。
6、可见性。当一个线程修改了共享属性的值,其它线程能立刻看到共享属性值的更改。比如JMM分为主存和工作内存,共享属性的修改过程是在主存中读取并复制到工作内存中,在工作内存中修改完成之后,再刷新主存中的值。若线程A在工作内存中修改完成但还来得及刷新主存中的值,这时线程B访问该属性的值仍是旧值。这样可见性就没法保证。
7、有序性。程序运行时代码逻辑的顺序在实际执行中不一定有序,为了提高性能,编译器和处理器都会对代码进行重新排序。前提是,重新排序的结果要和单线程执行程序顺序一致。

###Synchronized 同步

由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。补充: synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类。

1、方法同步。给方法增加synchronized修饰符就可以成为同步方法,可以是静态方法、非静态方法,但不能是抽象方法、接口方法。小示例:

public synchronized void aMethod() {
// do something
}

public static synchronized void anotherMethod() {
// do something
}

使用详解:
线程在执行同步方法时是具有排它性的。当任意一个线程进入到一个对象的任意一个同步方法时,这个对象的所有同步方法都被锁定了,在此期间,其他任何线程都不能访问这个对象的任意一个同步方法,直到这个线程执行完它所调用的同步方法并从中退出,从而导致它释放了该对象的同步锁之后。在一个对象被某个线程锁定之后,其他线程是可以访问这个对象的所有非同步方法的。

2、块同步。同步块是通过锁定一个指定的对象,来对块中的代码进行同步&#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值