多线程笔记

多线程

接口
##继承Thread类
    子类继承Thread类具备多线程能力启动线程:子类对象. start()
    不建议使用:避免OOP单继承局限性

##实现Runnable接口
    实现接口Runnable具有多线程能力
    启动线程:传入目标对象+Thread对象.start()
    推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用


##静态代理模式总结:
    真实对象和代理对象都要实现同一个接口
    代理对象要代理真实角色
##好处:
    代理对象可以做很多真实对象做不了的事情
    真实对象专注做自己的事情

Lambda表达式
##Lambda表达式
	格式:()->
	函数式接口的定义:
		任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。
		例如:public interface Runnable {
				public abstract void run();
			}
    对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。
    总结:
        lambda表达式只能有一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹。
        前提是接口为函数式接口
线程状态
  • 创建——就绪====运行——阻塞——死亡
线程礼让
##  礼让线程,让当前正在执行的线程暂停,但不阻塞
    将线程从运行状态转为就绪状态
    让cpu重新调度,礼让不一定成功!看CPU心情
    代码:Thread.yield();
Join(插队)
##Join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞(可以理解为插队)
	 代码:thread.join();
守护(daemon)线程
##  线程分为用户线程和守护线程
    虚拟机必须确保用户线程执行完毕
    虚拟机不用等待守护线程执行完毕
    如,后台记录操作日志,监控内存,垃圾回收等待..
    代码: thread.setDaemon(true);//默认是false表示用户线程,正常为用户线程
线程同步机制(同步方法和同步块)
##锁机制
    #同步方法:synchronized
    #同步块:synchronized(Obj){}
		两者可以保护代码的安全性
Lock锁
class A{
   private final ReentrantLock lock=new ReentrantLock();
       
      public void m(){
            try {
                //加锁
                lock.lock();
           				//保证线程安全的代码;
                }
            }finally {
                lock.unlock();//如果同步代码有异常,要将其写入
            }
		}
}
线程通信

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rCxtzMDv-1672884394117)(C:\Users\15364\Desktop\Java笔记Typora\image\线程通信.png)]

线程池
##JDK 5.0起提供了线程池相关API: ExecutorService和Executors
##ExecutorService:真正的线程池接口。常见子类ThreadPoolExecutor
   #void execute(Runnable command)∶执行任务/命令,没有返回值,一般用来执行Runnable
    #<T>Future<T>submit(Callable<T> task):执行任务,有返回值,一般又来执行Callable
	#void shutdown():关闭连接池

##Executors:工具类、线程池的工厂类,用于创建并返回不同类型的线程池
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值