多线程编程
  1.多进程:等同于多任务,一个进程是一个独立执行的程序,在内存里独立划分一个空间,多进程不是意义上的同时,而是CPU在进程间来回的切换
  2.线程是进程内部独立执行的流程,一个进程的所有线程共享一个内存空间,CPU在线程之间来回的切换,CPu在线程之间切换的消耗远远小于在进程之间的切换消耗,线程是小的处理单位
  关键字:Thread
  3.线程的实现:
  (1)第一种方式:
  只需继承Thread类,并重写run方法(相当于主线程的main方法),在main方法中调用start方法才能开启多线程,再由start方法自动调用run方法,直接调用run方法虽然没有报错,但是没有开启多线程,只相当于普通方法的调用
  (2)第二种方式:
  继承Runnable接口,把接口对象传入到线程对象Thread中去,再调用Thread线程的start方法
  4.线程的声明周期————线程的状态
  (1)新建状态:new出Thread对象
  (2)绪:start启动,在start运行run方法前
  (3)运行状态:开始执行run方法
  (4)死亡状态:run方法执行结束
  (5)中断状态:这个方法时CPU在执行的过程中,线程中断的状态
  A.因为优先级的原因未抢到CPU内存,处于中断的状态
  线程的优先级:setPriority设置优先级,高为10,低为1,默认为5
  Thread.MAX_PRIORITY(高),MIN__PRIORITY(低),NORM_PRIORITY(默认):优先级高只是被CPU青睐,执行几率高,并不是每次都将优先级高的执行完再执行优先级低的
  B.阻塞:线程在执行输入输出事件时,因等待而造成的
  C.休眠:调用Sleep方法,传入毫秒数进去,时间到了结束休眠
  D.等待、唤醒:Object中wait 、notify,notifyAll方法,notify方法有先后,第一个执行wait的方法被唤醒
  E.挂起yield,强制让某个线程退出CPU执行
  当多个线程同时访问同一个资源的时候才会发生线程安全性问题,解决线程安全问题,只需在资源上加同步锁,加了同步锁之后,第一个线程执行完后,第二个才能执行,安全性高效率低,安全性低效率高,但不是多线程都要用安全线程
  同步锁关键字synchronized(类型){方法
  死锁:当两个及两个以上线程同步访问一对循环依赖资源的时候,有可能发生死锁
  用线程间的通信解决死锁问题,wait,notify,只能够写在同步方法或者同步块中。}