1.线程池

是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。

2.创建线程池工厂类

ExecutorService类,返回线程池对象

3.线程池执行线程任务

  1.创建线程池对象

  2.创建线程任务对象,Runnanble

  3.线程池调用submit()方法运行线程任务

  4.关闭线程池shutdown()方法

4.Callable接口

重写Call方法,写任务,又返回值,可抛异常

5.线程池执行Callable接口方法

  1.创建线程池对象

  2.创建线程任务对象。Calable接口

  3.调用submit方法,返回Future对象

  4.Future对象调用get方法获取值

复制代码
      //获取线程池对象
        ExecutorService es=Executors.newFixedThreadPool(5);
        //创建线程任务
        MyCallable r=new MyCallable();
        //提交线程池任务
        Future<String> f=es.submit(r);
        //获取返回值
        String s=f.get();
        System.out.println(s);
        //关闭线程池
        es.shutdown();
复制代码

6.多线程

线程安全

如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

7.线程同步

1.同步代码块

把可能出现线程安全问题的代码放在同步代码块里

synchronized{   }  

同步代码块中的锁对象可以是任意的对象;但多个线程时,要使用同一个锁对象才能够保证线程安全。

2.同步方法

在方法声明上用synchronized修饰

8.Lock接口

创建Lock对象

Lock lc=new ReentrantLock()

在可能出现安全问题的代码前,lc.lock()获取锁,在最后调用unlock()方法释放锁

posted on 2021-03-06 11:35  心灯不夜  阅读(442)  评论(0)    收藏  举报