烂笔头 ( 四 )android 面试 mark

31、如何控制某个方法允许并发访问线程的个数?

https://www.cnblogs.com/androidsuperman/p/6349586.html

构造函数创建了一个 Semaphore 对象,并且初始化了 5 个信号。这样的效果是控件 test 方法最多只能有 5 个线程并发访问,对于 5 个线程时就排队等待,走一个来一下;

请求一个信号(消费一个信号),如果信号被用完了则等待;

释放一个信号,释放的信号新的线程就可以使用了.

 

32、在Javawaitsleep方法的不同;

wait 属于object超类的成员方法,会暂停当前线程并让出CPU的执行时间,会放弃所有锁并需要notify或notifyAll后重新获取对象锁资源后才能继续执行。通常只能在同步方法或者同步块中使用。

sleep属于thread的静态方法 ,可以在任何地方使用,会暂停当前线程并让出CPU的执行时间,当前线程并不会释放当前对象持有的对象的锁资源,到时间会继续执行,需要捕获或者抛出异常

相同点:两者都可以让线程处于冻结状态。

不同点:

sleep方法必须人为的为其指定时间,wait方法即可以指定时间,也可以不指定时间;

sleep方法不一定非要定义在同步中,wait方法必须定义在同步中;

当两者都定义在同步中,线程执行到sleep,不会释放锁。线程执行到wait,会释放锁。

 

33、谈谈wait/notify关键字的理解 

 

43、什么导致线程阻塞?线程如何关闭?

 

35、如何保证线程安全?

36、如何实现线程同步? 

37、线程间操作List 

38、谈谈对Synchronized关键字,类锁,方法锁,重入锁的理解 

39synchronized volatile 关键字的区别 

volatile 关键字解决的是变量在多个线程之间的可见性,只能用于修饰变量,是线程同步的轻量级实现,多线程访问volatile不会发生阻塞,能保证变量在多个线程之间的可见性但不能保证原子性;

sychronized 关键字解决的是多个线程之间访问共享资源的同步性,可以修饰方法以及代码块

 

40ReentrantLock synchronizedvolatile比较 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值