写本系列的目是为了重新梳理这部分内容;而且我的最初的目的是为了搞懂Java中的异步的实现方式,其中要使用到Callable这个类。
1 线程的第一种创建方式
在JavaAPI中明确的规定了创建线程存在两种方式,可是在实际的开发过程中或者面试问到的问题时回答两种通常不能令人满意。而且我对于第三种确实是不太熟悉的。
线程在Java中使用Thread类来表示;创建线程之后需要启动线程,因此方法start()就是启动线程的方式,至于我们的线程究竟要干什么,则是在run()方法中编写。
package com._thread; /** * 创建线程的第一种方式:继承Thread类 * @author gosaint * */ public class ThreadDemoNo1 extends Thread{ /** * 在这里我们编写线程要干的事。我让线程打印50次我在玩游戏 * this.getName()返回当前线程的名称 */ @Override public void run() { for (int i = 0; i < 50; i++) { System.out.println(this.getName()+"我在玩游戏"+i); } } /**main方法是主线程,当i=10的时候我启动线程*/ public static void main(String[] args) { for (int i = 0; i < 50; i++) { System.out.println("我在听音乐!"+i); if(i==10){ // Thread(Runnable target) 该构造器中的参数是Runnable接口对象 // 恰好是我们的Thread的子类 Thread t=new ThreadDemoNo1(); new Thread(t).start();//启动线程 } } } }
执行结果如下:
我在听音乐!0 我在听音乐!1 我在听音乐!2 我在听音乐!3 我在听音乐!4 我在听音乐!5 我在听音乐!6 我在听音乐!7 我在听音乐!8 我在听音乐!9 我在听音乐!10 我在听音乐!11 我在听音乐!12 我在听音乐!13 我在听音乐!14 我在听音乐!15 我在听音乐!16 Thread-0我在玩游戏0 Thread-0我在玩游戏1 Thread-0我在玩游戏2 Thread-0我在玩游戏3 Thread-0我在玩游戏4 Thread-0我在玩游戏5 我在听音乐!17 Thread-0我在玩游戏6 Thread-0我在玩游戏7 Thread-0我在玩游戏8 Thread-0我在玩游戏9 Thread-0我在玩游戏10 Thread-0我在玩游戏11 Thread-0我在玩游戏12 Thread-0我在玩游戏13 Thread-0我在玩游戏14 Thread-0我在玩游戏15 Thread-0我在玩游戏16 Thread-0我在玩游戏17 Thread-0我在玩游戏18 Thread-0我在玩游戏19 Thread-0我在玩游戏20 Thread-0我在玩游戏21 Thread-0我在玩游戏22 Thread-0我在玩游戏23 Thread-0我在玩游戏24 Thread-0我在玩游戏25 Thread-0我在玩游戏26 Thread-0我在玩游戏27 Thread-0我在玩游戏28 Thread-0我在玩游戏29 Thread-0我在玩游戏30 Thread-0我在玩游戏31 Thread-0我在玩游戏32 Thread-0我在玩游戏33 Thread-0我在玩游戏34 Thread-0我在玩游戏35 Thread-0我在玩游戏36 Thread-0我在玩游戏37 我在听音乐!18 Thread-0我在玩游戏38 Thread-0我在玩游戏39 Thread-0我在玩游戏40 Thread-0我在玩游戏41 Thread-0我在玩游戏42 Thread-0我在玩游戏43 Thread-0我在玩游戏44 Thread-0我在玩游戏45 Thread-0我在玩游戏46 Thread-0我在玩游戏47 Thread-0我在玩游戏48 Thread-0我在玩游戏49 我在听音乐!19 我在听音乐!20 我在听音乐!21 我在听音乐!22 我在听音乐!23 我在听音乐!24 我在听音乐!25 我在听音乐!26 我在听音乐!27 我在听音乐!28 我在听音乐!29 我在听音乐!30 我在听音乐!31 我在听音乐!32 我在听音乐!33 我在听音乐!34 我在听音乐!35 我在听音乐!36 我在听音乐!37 我在听音乐!38 我在听音乐!39 我在听音乐!40 我在听音乐!41 我在听音乐!42 我在听音乐!43 我在听音乐!44 我在听音乐!45 我在听音乐!46 我在听音乐!47 我在听音乐!48 我在听音乐!49