1、如果要想实现多线程,那么必须有一个前提:有一个线程的执行主类。
2、如果要想实现一个多线程的主类,有两类途径:集成一个Thread类实现Runnable、Callable接口。现在我们继承Thread类实现多线程。
3、java.lang.Thread是一个线程操作的核心类。如果现在要想定义一个线程的主类,那么最简单的方法就是直接继承Thread类,而后覆写该类中的run()方法(相当于线程的主方法)。定义线程主体类:class MyThread extends Thread {//线程的主体类 private String title; public MyThread(String title) { this.title = title; } @Override public void run() {//所有的线程从此处开始执行 for(int x=0;x<100;x++){ System.out.println(this.title + ",x=" + x); } }}
4、当现在有了线程的主体类之后,很明显首先就一定会想到产生对象随后调用方法,但是你现在不能够直接调用run()方法。现在我们观察直接调用run()方法:public class ThreadDemo { public static void main(String[] args) { MyThread myThreadA = new MyThread("线程A"); MyThread myThreadB = new MyThread("线程B"); MyThread myThreadC = new MyThread("线程C"); myThreadA.run(); myThreadB.run(); myThreadC.run(); }}
5、这个时候只是做了一个癔癍哂瘌顺序打印,而跟多线程没有关系。多线程的执行实际上和进程是相似的,也应该采用的是多个程序交替执行,而不是说各自执行各自的。正确启动多线程的方式应该调用的是Thread类中的start()方法:package com.gwolf;class MyThread extends Thread {//线程的主体类 private String title; public MyThread(String title) { this.title = title; } @Override public void run() {//所有的线程从此处开始执行 for(int x=0;x<5;x++){ System.out.println(this.title + ",x=" + x); } }}public class ThreadDemo { public static void main(String[] args) { MyThread myThreadA = new MyThread("线程A"); MyThread myThreadB = new MyThread("线程B"); MyThread myThreadC = new MyThread("线程C"); myThreadA.start(); myThreadB.start(); myThreadC.start(); }}
6、现在我们来观察程序的执行结果,程序应该是交替执行。
7、为什么要通过strat()方法调用run()方法,而不是run()直接执行?