Android面试线程,android 面试题 - 多线程部分

多线程很复杂的,内容很多的,大块的大家去看我多线程的文章,基本都涵盖到了,这里记录下面是的一些问题,怎么回答,不会大块介绍知识点

大家在复习多线程时需要学习下面的内容:

线程池、SYNC和Lock锁机制、线程通信、volatile、ThreadLocal、CyclicBarrier、Atom包、CountDownLatch、AQS、CAS原理

下面这些我就不写了:

atomic 与 volatile的区别?

Thread的 notify()给notifyAll()的区别?

notifiy()是唤醒的那一个线程?

Thread.sleep()唤醒以后是否需要重新竞争?

GC回收算法,及实现原理?

69a9277b010e

java 多线程基础部分

继承Thread类

实现Runnable接口

java 多线程进阶部分

wait()、notify() 等待通知方式

join() 方式

volatile 共享内存

CountDownLatch、CyclicBarrier 并发工具,功能和 join 相同

interrupt() 线程响应中断

线程池 awaitTermination() ,等待线程池任务结束方式,这种方式需要关闭线程池才有效

PipedWriter、PipedReader 管道通信方式

饿汉式单例模式的写法:线程安全

懒汉式单例模式的写法:非线程安全

双检锁单例模式的写法:线程安全

android 自身部分

先说 handle 的4个角色:

Handler - 消息发送器,内部持有一个 MessageQueue 消息队列,在发送消息时把 message.obj 指向 handle 自己,这样实现最终的消息执行

messageQueue - 消息队列,消息的储存单位

Looper - 遍历 MessageQueue 队列,启动主线程的阻塞式死循环

message - 通信的消息实体,使用 handle 发送消息时,其内部的 obj 会被指向该 handle 的引用

再说下逻辑过程:

开启循环 - 每个线程只有一个Looper,用来阻塞式循环,每个Looper对应一个MessgeQueue;无限的循环遍历MessageQueue,如果里边有消息就去处理消息,消息处理完继续循环,这样就一直循环下去,也是我们程序为什么不会退出的原因

发送消息 - handler创建的时候会根据线程去绑定,拿到对应线程的队列looper和MessageQueue,发送消息的过程就是在其他线程把Message放到MessageQueue当中

回调消息 - handler发送消息的时候会对Message消息打上tag,当looper遍历到Message对象,这个时候已经到了主线程,Message.tag就拿到了handler对象,然后回调对应的方法handler.handleMessage

handler.handleMessage(msg)

handler.post(Runnable r)

view.post(Runnable r)

Activity的 runOnUiThread(Runnable r)

CyclicBarrier的某个线程运行到某个点上之后,该线程即停止运行,直到所有的线程都到达了这个点,所有线程才重新运行,CountDownLatch则不是,某线程运行到某个点上之后,只是给某个数值-1而已,该线程继续运行

CyclicBarrier只能唤起一个任务,CountDownLatch可以唤起多个任务

CyclicBarrier可重用,CountDownLatch不可重用,计数值为0该CountDownLatch就不可再用了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当涉及到 Android 多线程面试题时,以下是一些常见的问题和答案: 1. 什么是线程和进程? - 进程是计算机中运行的程序的实例,它有自己的内存空间和资源。 - 线程是进程中的执行单位,一个进程可以有多个线程,共享进程的资源。 2. 为什么在 Android 中使用多线程? - 在 Android 应用中使用多线程可以提高性能和响应速度。 - 长时间运行的任务可以在后台线程中执行,避免阻塞主线程。 3. Android 中实现多线程的方式有哪些? - 使用 Thread 类创建新线程。 - 使用 AsyncTask 类在后台执行异步任务。 - 使用 HandlerThread 类在后台处理消息。 - 使用线程池来管理和复用线程。 4. 什么是 ANR(Application Not Responding)? - ANR 是指应用程序无法在一定时间内响应用户输入的情况。 - 当主线程被长时间阻塞时,系统会弹出 ANR 对话框,提示用户应用程序停止响应。 5. 如何避免在主线程中执行耗时操作? - 将耗时操作放在后台线程中执行,例如使用异步任务或线程池。 - 使用 Handler 或 HandlerThread 处理异步操作的结果。 6. 什么是线程同步和线程安全? - 线程同步是指在多个线程访问共享资源时,保证数据的一致性和正确性。 - 线程安全是指在多线程环境下,对共享资源的访问不会导致数据错误或不一致。 这些问题只是多线程面试中的一部分,还有其他更深入的问题可以探讨。希望这些答案能帮助到您,祝您面试顺利!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值