学习java第二十二天

学习java第二十二天

线程
wait()线程睡眠
notify()单个线程唤醒,唤醒当前对象
notifyAll()唤醒所有线程
上面都是Object方法,因为进行锁时要锁对象,Object是最大的父类,锁其他对象类也是Object的子类
wait() 和 sleep():
sleep一段时间内会释放锁
wait()可以一段时间释放,也可以永远不释放

notify() 与notifyAll()
notify 会唤醒对象,如果存在多个对象,会交替唤醒对象
notifyAll() 唤醒所有对象
线程的生命周期:
在这里插入图片描述
生产者和消费者模式:避免资源的浪费
生产者与消费者属于互斥锁,只能有一个线程在执行
1.使用构造来解决这个锁的是不是同一个对象的问题
需要用到以下状态:
produce.notify();
produce.notifyAll();
produce.wait();

死锁:两个线程都互相谦让。等待对方执行。或者互相都不让,占用着各自的资源不放。

关键字 volatile:表示数据的可见性,线程1的值改变后立刻告诉线程2

public static volatile 数据类型 名称;

线程池:
没有使用线程池之前需要来创建线程,用完之后要进行销毁,消耗性能
线程池就是对线程进行管理,也就是一个容器

Executors(线程工具类):线程池工具类
Callable(接口):结果类型,实现者需要定义了一个不带任何参数的 call 方法。
Future(接口):返回线程异步计算的结果

使用步骤:

ExecutorService 对象名 =Executors.newFixedThreadPool(10);//得到线程池对象
Future f =对象名.submit(new Gobackimpl(10));//提交任务
//提交一个 Runnable 任务用于执行完成后返回null,
//提交一个返回值的任务Callable< T >用于执行,返回一个表示任务的未决结果的 Future。
//该 Future 的 get 方法在成功完成时将会返回该任务的结果。 
对象名.shutdown(); //关闭任务

java.util
类 Timer:定时操作类
一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。
public void schedule(TimerTask task, long delay)安排在指定延迟后执行指定的任务。
参数:task - 所要安排的任务。delay - 执行任务前的延迟时间,单位是毫秒。

public void schedule(TimerTask task, Date firstTime, long period)
参数:task - 所要安排的任务。firstTime - 首次执行任务的时间。period - 执行各后续任务之间的时间间隔,单位是毫秒。

java.util
类 TimerTask(抽象类)
是实现定时操作的任务对象,由 Timer 安排为一次执行或重复执行的任务。

设计模式:按照某些好的经验完成框架
单例设计:有且仅加载一个类,静态的也可以有且仅加载一次(问题较多)
工具类大部分都是单例设计的。
注:
私有的属性
私有的构造
公有的方法

第一种(饿汉):类加载就创建时对象
第二种(懒汉):类加载时不同时创建对象,需要时且判断到对象为空时才创建对象,
第三种(老汉):在饿汉模式实例化对象时加上finally
双重锁:锁方法,锁对象 :

public class 类名{
     // 私有的属性
      private  static  类名 对象名;
        // 私有的构造
      private   类名(){
      }
      // 提供共有的方法
       public   synchronized static 类名   getInstance(){
           if(对象名 ==null){
               //锁class 文件,防止高并发里遇到实例化两个对象,锁class文件
                synchronized (类名.class){
                     if(对象名 == null){
                          对象名  = new 类名();
                     }
                }
           }
            return   对象名;
       }
}

工厂模式:
简单工厂者模式:生产对象 ==> 就是多态的一种体现
第二种: 使用接口来进行规范标准约束,生产对象
体现形式: (多态的形式)
1.以父类作为返回值 简单工厂者
2.以父类作为参数

枚举:enum:(抽象类)
创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是java.lang.Enum 类的子类
枚举类里的常量都大写
和switch搭配一起使用

常规方法:
public final String name()返回此枚举常量的名称,在其枚举声明中对其进行声明。
public String toString()返回枚举常量的名称,它包含在声明中。
优先考虑使用 toString() 方法。

总结:今天这个学习内容不得不说是很杂很多,从线程池到生产者消费者理解到工厂模式到枚举。有些类都还没有怎么看过就过了,需要好好记。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值