1.线程的创建
使用Thread t=new Thread();创建线程对象
t1.start();创建这个新线程并运行这个线程中的run()方法
注:可以通过继承Thread类重写run方法来在此类中使得线程去做一些事情,但由于java是单继承的,所以最好使用Runnable接口(单方法接口,即函数式接口,只有run()方法,可以使用lamda表达式来表示)
2.线程中断
Thread.interrupt()为线程设置中断标志
Thread.isInterrupted()判断线程是否被中断
Thread.interrupted()判断线程是否被中断,并清除中断标志
3.notify()和wait()
当一个对象实例调用了obj.wait()后,会将此线程放入使用obj对象的线程等待队列中,别的线程调用obj.notify()会通知等待队列,随机选择一个线程唤醒,notifyAll()则是唤醒所有队列。这两个函数的每次操作都必须先获得此对象(obj)的监视器(我认为是锁)
4.join()和yeild()
join():调用此函数得线程会一直被阻塞,直到目标线程完成任务,一般适用于一个线程的输入依赖于其他线程的输出
yield():静态方法,使得当前线程让出CPU,与其他线程一起进行CPU资源抢占
5.守护线程
系统的守护者: Thread t= new DaemonT(); t.setDaemon(true); 设置守护进程
6.volatile关键字修饰的变量,确保某个线程修改了这个数据后,其他线程能够看到这个改动
7.sychronized :
- 给对象加锁
2)给实例方法加锁,相当于给这个实例加锁
3)给静态方法枷锁,相当于给这个类的加锁