java_0827

Java多线程开启

1.直接new Thread 三个线程开启start();
2.通过 开启线程池 Excutors.newFixedThreadPool(int i);
最后分配任务对象给线程池的线程去工作
结束线程池: shutDown();

并发,从宏观方面来说,并发就是同时进行多种时间,实际上,这几种时间,并不是同时进行的,而是交替进行的,而由于CPU的运算速度非常的快,会造成我们的一种错觉,就是在同一时间内进行了多种事情。

第一条线程先抢占到CPU资源,他刚刚进行了第一次操作,而此时第二条线程抢占到了CPU的资源,name,共享资源还来不及发生变化,就同时有两条数据使用了同一条资源,具体请参考多线程买票问题。这个问题我们应该如何解决那?

在一个应用程序中,我们需要多次使用线程,也就意味着,我们需要多次创建并销毁线程。而创建并销毁线程的过程势必会消耗内存。而在Java中,内存资源是及其宝贵的,所以,我们就提出了线程池的概念

使用submit()将任务对象提交到线程池
shutdown 结束线程池。

生产者消费者问题

需要使用对象锁 obj 使用同步代码块访问临界资源。
使用wait()这个是object的方法不属于线程方法,释放对象锁,使得当前线程阻塞。
notify()唤醒所有wait()状态的线程,让他们去抢夺锁。

单例设计模式

1.私有化的构造方法
2,私有化的内部对象,即在类里面new自己
3.提供方法给外界获取类的对象

饿汉:
类的对象随着类的加载就创建对象
这样线程比较安全,但是不够优化

懒汉:
类的对象并没有随着类的加载而创建
只有当他想创建的时候创建,注意:

判断对象是否为空时,需要价格同步锁,可能多线程会不安全,有多个对象的状态

枚举

   //Color.name是枚举变量名即枚举对象
        //枚举对象.方法名就是枚举对象对应方法的对应名
        System.out.println(Color.Blue.getType());// 输出蓝色  Red(1,"红色"),Blue(2,"蓝色") ;
        System.out.println(Color.Blue.name());//   输出blue Red(1,"红色"),Blue(2,"蓝色") ;
        System.out.println(Color.Blue.getI());
        System.out.println(Color.Red.ordinal());    //默认从声明实例对象序号为0开始

枚举类不能继承其它类,构造方法是私有的。类似于多个对象的单例模式

在enum类型里面
public enum Color{
		Red(自己写一个构造参数);  都是实例对象
		name():返回实例名。
	实例就好像是Red一样 把它看成方法,默认调用无参的构造,可以自己定义有参
ordinal():返回实例声明时的次序,从0开始。

果要为enum定义方法,那么必须在enum的最后一个实例尾部添加一个分号。此外,在enum中,必须先定义实例,不能将字段或方法定义在实例前面。否则,编译器会报错。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值