小米官网网站建设,wordpress换ico,网站设计就业,织梦网站更新1、多线程的使用方式1.1、继承Thread类继承Thread并重写run()方法#xff0c;Thread类中的start方法会去调用系统的方法执行相应的线程。实际上Thread也是实现了Runable接口的#xff0c;从该类的文档中我们能找到。1.2、实现Runable接口实现Runable接口#xff0c;并重写ru…1、多线程的使用方式1.1、继承Thread类继承Thread并重写run()方法Thread类中的start方法会去调用系统的方法执行相应的线程。实际上Thread也是实现了Runable接口的从该类的文档中我们能找到。1.2、实现Runable接口实现Runable接口并重写run()方法启动线程必须要使用Thread类的start()方法。1.3、实现Callable接口实现Callable接口的代码例子import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;/** *//*** Callable 和 Future接口* Callable是类似于Runnable的接口实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。* Callable和Runnable有几点不同* (1)Callable规定的方法是call()而Runnable规定的方法是run().* (2)Callable的任务执行后可返回值而Runnable的任务是不能返回值的。* (3)call()方法可抛出异常而run()方法是不能抛出异常的。* (4)运行Callable任务可拿到一个Future对象* Future 表示异步计算的结果。它提供了检查计算是否完成的方法以等待计算的完成并检索计算的结果。* 通过Future对象可了解任务执行情况可取消任务的执行还可获取任务执行的结果。*/public class CallableAndFuture {/** *//*** 自定义一个任务类实现Callable接口*/public static class MyCallableClass implements Callable{// 标志位private int flag 0;public MyCallableClass(int flag){this.flag flag;}public String call() throws Exception{if (this.flag 0){// 如果flag的值为0则立即返回return flag 0;}if (this.flag 1){// 如果flag的值为1做一个无限循环try {while (true) {System.out.println(looping.);Thread.sleep(2000);}} catch (InterruptedException e) {System.out.println(Interrupted);}return false;} else {// falg不为0或者1则抛出异常throw new Exception(Bad flag value!);}}}public static void main(String[] args) {// 定义3个Callable类型的任务MyCallableClass task1 new MyCallableClass(0);MyCallableClass task2 new MyCallableClass(1);MyCallableClass task3 new MyCallableClass(2);// 创建一个执行任务的服务ExecutorService es Executors.newFixedThreadPool(1);try {// 提交并执行任务任务启动时返回了一个 Future对象// 如果想得到任务执行的结果或者是异常可对这个Future对象进行操作Future future1 es.submit(task1);// 获得第一个任务的结果如果调用get方法当前线程会等待任务执行完毕后才往下执行System.out.println(task1: future1.get());Future future2 es.submit(task2);// 等待5秒后再停止第二个任务。因为第二个任务进行的是无限循环Thread.sleep(5000);System.out.println(task2 cancel: future2.cancel(true));// 获取第三个任务的输出因为执行第三个任务会引起异常// 所以下面的语句将引起异常的抛出Future future3 es.submit(task3);System.out.println(task3: future3.get());} catch (Exception e){System.out.println(e.toString());}// 停止任务执行服务es.shutdownNow();}}2、线程同步2.1、同步代码块synchronized(锁){ //在这里锁通常有两种一种是字符串常量另外一种是this//需要同步执行的代码块}2.2、同步方法public synchronized void xxx(){//同步方法}3、总结3.1、所有线程的启动都必须调用Thread类中的start()方法new Thread(线程名字).start();3.2、实现Runable是首先应该考虑的方法有下面的两点原因在Java中继承类具有局限性每个类只能继承一个类但是能实现多个接口实现Runable接口能更好的共用数据实现Callable能返回值(其它两个方法在线程结束之后不能返回值)转自https://blog.csdn.net/jpzhu16/article/details/53326506https://my.oschina.net/rouchongzi/blog/129333本文进行了新的排版文字信息主要来自于上述链接。