注:     InterruptedException 线程等待时需要抛出异常,暂时接触到的有 wait(),join(),sleep();
喜讯:   google旗下Android联合许多家手机公司在手机底层编程开始使用java,对于java程序员的意义大家自己可以自己考虑。
练习外语听力方法:尽量找自己能听得听力材料,听到直到耳熟能详(这对语感及词汇记忆都是一个很大的帮助),然后去选择其他的    
趋势:   互联网 至 物联网的转变
线程之我见 总结:  多线程 (Thread)(理解,一个进程当中的多个任务)
  多进程(多任务)针对 os(cpu来回切换,每个任务都有独立的内存空间)
  区别:进程是独立的内存空间,线程是共享的数据空间,而这个数据空间正好是一个进程(一个内存空间)。
Thread类由JDK提供,用于封装对JVM中线程的控制。
线程的组成:1)cpu分给线程的时间片2)线程代码写在run()方法中3)线程数据
1.创建一个线程
JVM会创建默认的线程(main),用来运行主方法。
2.程序员可以创建自己定义的线程 
    定义线程的运行体
    public class MyThread extends Thread {
public void run() {
for (int i = 0; i < 100000; i++) {
System.out.println("Thread" + i);
}
}
    }  Thread.sleep();
  作用在于:让当前线程“挂起”sleep(若干毫秒)
  让运行该方法的线程挂起。
 3线程运行的俩种方式:
   1)
     public class TestThread{
       public static void main(String[] args){
           Thread th=new MyThread();
           th.start();
       }
    }
     class MyThread extends Thread{
       public void run(){
        需要执行的代码;
       }   
     }
   2)
      public class TestThread implements Runnable{
       public static void main(String[] args){
           Thread th=new MyThread(new TestThread());
           th.start();
       }
       public void run(){
        需要执行的代码;
       }   
     }
 4线程的几种状态:1.运行(run) 2.就绪(ready)3阻塞挂起(block)其中阻塞又可分(A)控制台System.in +readLine()  (B) wait(),join(),sleep()等 
 5守护线程
   通过setDaemon方法,可以设置线程的守护线程。JVM如何发现当前的线程全部是守护线程时,就退出。
   守护 非守护的区别:守护,主线程结束则不等子线程结束之前就结束程序。 非守护,主线程结束之前必须等所有的子线程执行完毕。
 6 线程安全问题
    什么情况些会出现线程安全问题:俩个以上的线程访问同一个可变对象。//同时访问一个String(不可变化) 则不会有安全问题
    如何去避免:加锁。
         synchronized(对象(monitor)){语句块}让对象把语句块看住,只允许一个线程在运行。(monitor相当于该语句块的通行证,它是唯一的)
    public class NameList{
    private List<String> nameList=new ArrayList<String>();
    public void addName(String name){
     System.out.println(..);
           synchronized(obj){ nameList.add(name);}
      }
    }    如果当有这样的题目:这个类是否为线程安全??
    相当于问:如果有俩个以上的线程的同时访问同一个对象 ,是否会线程安全问题。
    public void f(){
        synchronized(this){}
     }
     相当于
     public synchronized void f(){}
     当然这的this只适用于非静态方法。
7  了解线程安全及线程不安全的类
    线程安全    :String ,Integer,Double 等八个基本类  StringBuffer  
    线程不安全(后来要求速度快,它诞生)  :StringBuilder 除了(Vector,Hashtable早期的很少用了) 集合类都是线程不安全。
8了解一些Thread的基本方法:
                   setName(name);//设置线程名字
   getName();//获得线程名字
   getId();//获得线程ID
           少用     setPriority(newPriority);设置线程优先级别(一般最高改到5 系统默认主方法为5)
   getPriority();//获得线程级别
                   MAX_PRIORITY; //最高级别到10
           MIN_PRIORITY;//最低级别到1
                   currentThread()//获得当前线程
8.timer and timerTask
例:
public class TestTimer {

    
public static void main(String[] args) throws InterruptedException {
// 调度器
Timer timer = new Timer();// 用于调度
timer.schedule(new MyTask(), 2000,100);
   }
        }
      class MyTask extends TimerTask {
   public void run() {
  System.out.println("MyTask...");
   }
        }
    timer 调度器 控制一个任务
    TimerTask 用来定义一个任务 
        顺序延迟
        Timer timer = new Timer();// 用于调度
timer.schedule(new MyTask(), 2000,100);//主方法在2秒后以0.1秒每次速度执行new MyTask()里的run方法体。

       把内部用到的线程设置为守护线程
Timer timer1 = new Timer(true);
timer1.scheduleAtFixedRate(new MyTask(), 2000, 100);
        schedule  和scheduleAtFixedRate区别:
        前者 如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则后续执行也将被延迟
        后者 如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则将快速连续地出现两次或更多的执行,从而使后续执行能够“追赶上来”。
9线程同步:
   我的理解是在线程安全基础上为了保证上一个线程状态,而加上wait()和notify()的组合而造成的不安全因素。谨慎使用。
   可以衍生到 (商业中的生产者消费者之间的平衡问题,生产者和消费者的市场调查)
  wait():
    1)任何对象都有的方法 注:想调用该对象的wait(),就必须有该对象的monitor(唯一的通行证)
    2)该方法作用在于把monitor还回去
    3)用该方法的对象(线程)一只在这里等待
  notify():
    1)唤醒一个wait()
  notifyAll():
   
    2)一次唤醒所有wait(),这当中就有一个随机的问题(线程安全synchronized要求一次)。。
   喝水倒水的例子。
10 单列模式:
    public class Foo {
 public static Foo instance;
 private Foo(){}
 public synchronized static Foo getIntance(){
if(instance==null){
instance=new Foo();
         }return instance;
         }
        }
  synchronized 保证了该类是真正的单例
  服务器端:多线程安全 单例(缓存) 
  单列模式用的场合:当一个服务器有相当大的访问量
  单列模式:构造私有化 当然在类体内部可以new出他的构造来 原理,静态成员,静态方法不管你new多少次,它只有一个,外部访问的时候只能通过他的方法去访问该类。
 public class Foo {
public static Foo instance;
private Foo(){}
public static Foo getIntance(){
if(instance==null){
instance=new Foo();
}return instance;
}
 }11.ThreadLocal
   
12.Collection 接口,Collections(Array)类 
           1。单例模式
           2。Wrapper 包装模式
              Collections.synchronizedList(list) 把一个(list)线程不安全的list对象放进去,出来的是一个线程安全的
              Collections.unmodifiableList(list) 返回一个不能修改的list
              1)同一个接口
              2)加以包装
13目前join,yield
14结束线程的几种方式:
   中间涉及到反模式。