day24

Lock锁 也可以解决票出现0票的问题
    清晰的表示加锁和释放锁
ReentrantLock lock();unlock();
死锁现象 两个或者两个以上的线程,在抢占CPU的执行权的时候,都处于等待状态
    停止不动
代码要求会写
Interface MyLock{
private static final Object objA=new Object();
private static final Object objB=new Object();}
class MyThread{
priavate boolean flag;
public MyThread(boolean flag){
this.flag = flag ;
}//crtl+shift+s+o
if(flag){
synchronized(MyLock.ObjA){System.out.println("ObjA..true");
synchronized(MyLock.ObjB){System.out.println("ObjB..true");}else{
synchronized(MyLock.ObjB){System.out.println("ObjB..false")
synchronized(MyLock.ObjA){System.out.println("ObjA..false")}}}}
}
线程池
    指定数量的线程
使用步骤
   获取线程池
Executors这个类中方法:
  public static ExecutorService newCachedThreadPool(): 根据任务的数量来创建线程对应的线程个数
public static ExecutorService newFixedThreadPool(int nThreads): 固定初始化几个线程
public static ExecutorService newSingleThreadExecutor(): 初始化一个线程的线程池
  提交任务
            ExecutorService 中的方法: submit(Runnable task)
  停止线程池
  void shutdown()
  面试题===========
  多线程有几种实现方案,分别是哪几种?两种
第一种: 自定义一个类,然后该类继承Thread类
第二种: 自定义一个类,然后让该类实现Runnable接口
  同步有几种方式,分别是什么?2种:
第一种: 使用同步代码块
第二种:  同步方法
  启动一个线程是run()还是start()?它们的区别?
  如果我们调用run方法,那么就是把该方法作为普通的方法执行
而我们调用start方法,其实是通知jvm开启一个线程去执行run方法
定时器
    Timer 用于Java线程指定时间或周期运行任务
使用步骤
   创建对象
执行任务
设计模式:经验的总结    分类:创建对象 行为功能 结构组成
    思考设计问题的方法,被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。
作用:可重用代码,更易被理解,保证可靠性,结构清晰
分类:
   创建 创建对象  单例,抽象工厂,建造者,工厂,原型。
行为 对象功能  适配器,桥接,装饰,组合,外观,享元,代理。
结构 对象组成   模版方法,命令,迭代器,观察者,、中介者,备忘录,解释器,状态,策略,职责链,访问者。
   简单工厂
  定义一个具体的工厂类
抽象工厂
  定义一个抽象类的接口,对象创建由继承抽象工厂的具体类实现
  
单例  
   保证类在内存中只有一个对象,节省内存
实现:方法私有 提供一个对象和公共访问方式
   饿汉式和懒汉式的区别:回到家很饿,立刻做饭吃(饿汉式) 先休息一会(懒汉式)
  面试懒汉:线程安全+synchronized 对象等调用方法时才加载(延迟加载)
  开发饿汉
  两种思想  线程安全和延迟加载
模板
   定义一个算法的骨架,具体的算法由子类实现
装饰者
   使用被装饰类的一个子类的实例(装饰类),相当于继承 
手机听音乐,天气预报
观察者
   猎头headhunter
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值