publicclassMyThreadextendsThread{/*
* run方法,线程要执行的任务方法
*/@Overridepublicvoidrun(){//这里的代码就是一条新的执行路径//这个执行路径的触发方式不是调用run方法,而是通过thread对象的start()来启动任务for(int i =0; i <10; i++){System.out.println("我是继承Thread生成的子线程"+ i);}}}
继承Thread类:调用类编写
publicclassTest{/*
* 主线程
*/publicstaticvoidmain(String[] args){MyThread myThread =newMyThread();
myThread.start();for(int i =0; i <10; i++){System.out.println("这里是主线程"+ i);}}}
5.2 实现Runnable接口(常用)
实现Runnable接口:子线程类编写
publicclassMyRunnableimplementsRunnable{@Overridepublicvoidrun(){for(int i =0; i <10; i++){System.out.println("我是实现Runnable生成的子线程"+ i);}}}
实现Runnable接口:调用类编写
publicclassTest{/*
* 主线程
*/publicstaticvoidmain(String[] args){//创建任务对象MyRunnable myRunnable =newMyRunnable();//创建一个线程,并为其分配一个任务Thread thread =newThread(myRunnable);//启动执行这个线程
thread.start();for(int i =0; i <10; i++){System.out.println("这里是主线程"+ i);}}}
5.3 实现Callable接口
编写类实现Callable接口 , 实现call方法
classMyCallableimplementsCallable<Integer>{@Overridepublic<Integer>call()throwsException{for(int i =0; i <10; i++){System.out.println("我是实现Callable生成的子线程"+ i);}return100;}}
实现Callable接口:调用类编写
publicclassTest{/*
* 主线程
*/publicstaticvoidmain(String[] args){//创建任务对象Callable<Integer> c =newMyCallable();//创建FutureTask对象 , 并传入第一步编写的Callable类对象FutureTask<Integer> future =newFutureTask<>(c);//生成一个线程,并给它一个FutureTask任务Thread thread =newThread(future);//启动执行这个线程
thread.start();/*
*如果线程启动后加入如下语句,主线程则回在得到返回值时再执行,即子线程执行完毕后,执行主线程
*Integer i = future.get();
*/for(int i =0; i <10; i++){System.out.println("这里是主线程"+ i);}}}