线程
方法:
- 自定义实现runnable接口
重载run()操作,作为参数创建Thread - 继承Thread类
extends Thread,间接实现runnable
run(),start()开始执行run(),Thread implements Runnnable
Thread构造方法
参数:无参、线程名、runnable
内部类保存了外部类的指针
Thread.sleep(100)休眠一百毫秒
注意使用try-catch(sleep可能被打断)
==native==方法:调用本地的、底层的代码,主要用于执行run()
对共享数据的访问不完整性=>解决方法:
- 做成一个整体:synchronized,修饰方法或代码段,每个包含synchronized的对象使用一把互斥锁
- 使用时避免死锁
- 若修饰一个静态方法,所有对象共用一把互斥锁
线程生命周期
新建、就绪、执行、阻塞/消亡
yield()放弃run()回到就绪
blocked:I/O操作、wait()释放互斥锁、sleep()和suspend()不释放互斥锁
wait()与notify():
消费者生产者模式,实现线程间通信
但可能造成死锁,synchronized,同时等待对方放弃自己需要的资源