多线程

多线程主要考虑的是多个线程对共有资源的冲突!!!

多线程的不确定性!

一、基础概念

实现多线程有两种方式 实现Runnable接口、 继承Thread (实际Thread也是实现Runnable接口) 重写对应的run()方法

调用start()方法是启动线程 调用run()方法其实相当只是调用了这个类的run(),并没有开启线程!

二、synchronized(互斥锁,共用资源线程串行依次执行)

1、在方法上加上synchronized,那么对于同一实例,会依次等待,但对于不同实例来说没效果!(执行完毕或抛出异常则释放锁)

2、锁的粒度要尽量小

3、经典的单例模式(懒汉中不建议使用直接在genInstance()方法上加锁,虽然能达到效果,但效率低)

经典 double check

三、interrupt 中断:将在blocked或wait pool中的线程结束阻塞状态,重新回到runnable就绪状态/lock pool(ps,执行interrupt后并不是立刻将该进程回到runnable,有调度时间差!!! 多线程调度都有时间差)


interrupt

四、join


在thread1中调用thread2().join


五、wait 

调用wait(),进入等待池(特殊的阻塞),只有获得锁的线程才可以获取执行资源

wait和notify必须在synchronized方法或块中

sleep()方法会释放CPU,但不释放锁!

自私线程:在run中设置了大循环的线程

礼貌线程:在run中主动调用yield()方法

六、J.U.C

后续补充

你可能感兴趣的:(多线程)