多线程小记

初识

实现方式

第一种实现方式:(继承thread类的方式实现)

第二种实现方式:(实现runnable接口方式进行实现)

key01:

第三种实现方式:(利用callable接口和future接口方式实现)

常用成员方法

key01:构造方法不能够继承,子类想使用父类的构造方法就需要使用到super关键字。

用来创建对象时初始化对象,即为对象成员变量赋初始值,总是与new运算符一起使用在创建对象的语句中。特别的,一个类是可以有多个构造函数,可以根据参数个数的不同或者参数类型的不同来区分它们,即为构造函数的重载。

格式如下:

修饰符 方法名(){}

其中需要注意的是:

  1. 方法名与类名相同;
  2. 没有返回值类型;
  3. 没有具体的返回值。

注意事项

① Java中的每一类至少有一个构造方法,如果我们没有去创建,系统自动会为我们创建一个默认的无参构造方法;

②但是如果我们定义了构造方法,系统就不会再为我们提供默认的无参构造方法了。这个时候想使用无参构造方法必须自己定义。因为实例化对象时,不一定会输入参数,那么没有无参的构造方法,又不输入参数,就会出错;

③构造方法需要用public来修饰,若使用private,在其他类中无法将其实例化;

④构造方法是可以重载的。所谓重载,是指一个类中可以定义多个方法名相同,但是参数不同的方法。调用时,会根据不同的参数自动匹配对应的方法。

key02:

key03:

子类重写父类的方法,如果父类没有抛出异常,子类也不能抛出异常只能try-catch;

在子类初始化时会自动调用父类的无参构造方法(只调用无参构造方法,不调用带参构造方法)

子类也可以手动调用父类的无参构造方法(使用super关键字)

总结:子类初始化时不会自动调用父类的带参构造方法,如果用到了父类的带参构造方法,则需要手动去调用,手动调用父类的构造方法后,子类不再自动调用父类的无参构造方法;

注意:不管是子类手动调用父类的无参构造方法,还是手动调用父类的带参构造方法,代码必须写在子类构造方法的第一行

key04:(应用--qq聊天窗口传输文件)

生命周期

安全性问题

key01:写run四步曲

将线程休眠代码写在同步代码块的外面,可以让其线程优先级均匀

key02:

StringBuffer是线程安全的,StringBuilder是线程不安全的。多线程使用StringBuffer

key03:

lock.unlock();一般写在finally中。“避免有人上厕所关门,然后跳窗跑了,导致所有人一直在外面等”

线程状态

线程池        

key01:线程池参数

key02:

        parameter02:Runtime.getRuntime().availableProcessors();可以获取虚拟机可以使用的处理器数量

        parameter04:TimeUnit.SECONDS或者TimeUnit.MINUTE

        parameter05:new ArrayBlockingQueue<>()             指定长度

                                new LinkBlockingQueue                      不指定长度

        parameter06:Executors.defaultThreadFactory内有创建线程方法

        parameter07:使用内部类,依托于外部类的存在而有意义

key03:线程池大小

        CPU繁忙型:+1是为了保证,当某个线程因为系统中断而阻塞,有备用线程可以上处理机运行保证cpu利用率很高

        I/O密集型:965来说,老板看到你在公司每天上班7小时,但是你自己得把杂七杂八时间算进去假如也是7小时。那么可以说你一天得工作14小时。带权时间

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值