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()方法释放锁

浙公网安备 33010602011771号