同步机制、等待唤醒机制、sleep()和wait()、线程的状态、创建线程的方式

1、什么是同步机制?

为了解决线程安全问题,多个线程并发执行,出现了字段访问冲突。
synchronized基于jvm实现的------多个线程持有”锁标志“,通过同步代码块控制访问的字段。每一个线程持有的锁必须是同一个,当某个线程如果执行了并且进入到同步代码块中,其他线程在当前线程执行期间,不能持有该锁,,当前这个线程执行完毕,会释放”锁标志“,其他线程如果进入到同步代码块中,持有该同一个”锁“。
	synchronized和Lock都属于可重入锁,Lock锁更灵活:lock()/unlock(),通用方式:synchronized
synchronized(锁对象){
	语句体(多条语句共享数据的操作)
}
同步机制:是指多个线程在共用同一个锁对象

2、什么是等待唤醒机制?

就是在一个线程进行了规定操作后,就进⼊等待状态( wait() ),等待其他线程执行完他们的指定代码过后再将其唤醒( notify() );在有多个线程进⾏等待时,如果需要,可以使⽤ notifyAll() 来唤醒所有的等待线程。
多个线程在使用资源的时候,如果当前资源并非同一个锁,可能会出现锁
	引入生产者消费者模式思想(操作对象必须是同一个资源对象)
	生产者线程---不断的产生数据---如果当前没有数据了,等待生产者线程产生数据,当前这个数据已经有了,需要通知(notify())消费者线程,使用这个数据
	消费者线程---不断的使用数据---如果当前没有数据了,等待使用数据,如果没有数据了,通知(notify())生产者线程----产生数据

3、sleep()和wait()的区别

1)是否会释放锁
	sleep()方法调用,不会释放锁,线程休眠,在一定时间内,当前线程除以阻塞状态,时间到了,继续执行
	wait()的调用,会立即释放锁,通过锁对象.notify()唤醒其他线程
2)来源不同
	sleep()来源  Thread类---线程Thread类直接访问
	wait() 来源  Object 类---使用锁对象访问
3)都可能会出现异常
		中断异常
		睡眠状态被打断了,出现中断异常
		等待过程中,也可能中断异常

4、线程的状态有几种?

六种
NEW              初始状态,线程被构建,但是还没有调用start方法
RUNNABLE         运行状态,java线程将操作系统中的就绪和运行两种状态笼统地称作“运行中”
BLOCKED		     阻塞状态,表示线程阻塞于锁
WAITING		     等待状态,表示线程进入等待状态,进入该状态表示当前线程需要等待其他线程线程做出一				些特定动作(或通知中断)
TIME_WAITING     超时等待状态,该状态不同于WAITING,它是可以在指定的时间自行返回的
TERMINATED	     终止状态,表示当前线程已经执行完毕

5、创建线程的方式有几种方式?请列举

3种
通过继承来创建线程  继承自Thread类
通过接口来实现线程的创建 实现接口Runnable--静态代理
线程池  工厂类:Excutors
		public static ExcetuorService
		ExceutorService--子实现类ThreadPoolExecutor(线程池的相关的参数)
		corePoolSize
		maxminPoolSize
		handler:拒绝策略
线程池的启用-----比较消耗成本
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值