1 A.java
* 学习多线程之前,我们先要了解几个关于多线程有关的概念。
A:进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。
B:线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
C:简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程
什么是多线程呢?即就是一个程序中有多个线程在同时执行。(同一时间做多件事情,安全性低,效率高)* 多线程的实现方式:
* 方式1:
* 一种方法是将类声明为 Thread 的子类。
* 该子类应重写 Thread 类的 run 方法。
* 接下来可以分配/创建并启动该子类的实例
*
* Thread
* String getName() 返回该线程的名称。
*
* void setName(String name) 改变线程名称,使之与参数 name 相同。
*
* 现在使用了多线程,所以输出是切换性的,不会按顺序执行,先是张三执行完,再次依次往后执行...
*
* CPU执行程序的随机性,多个程序进行高速切换,所以并不不会感觉有卡顿现象!
右键选择,Source,选择Override选择需要重写的方法定义多线程类:
public class A_MyThread extends Thread { @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println(getName() + ":" + i); } } }
定义主类:
public class A_ThreadMain { public static void main(String[] args) { //创建线程实例 A_MyThread mt = new A_MyThread(); //修改线程名字 mt.setName("张三"); //不改名字就是默认是从Thread-0,Thread-1...开始 //启动线程 mt.start(); //创建线程实例 A_MyThread mt2 = new A_MyThread(); mt2.setName("老王"); //启动线程 mt2.start(); } }
2 B.java
* 主方法中的代码(方法)执行是多线程吗?
* 图解:
* 主方法的(方法)执行是单线程!3 C.java
* 多线程的实现方式:
* 方式2:
* 创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后创建Runnable的子类对象,传入到某个线程的构造方法中,开启线程。
为何要实现Runnable接口,Runable是啥玩意呢?继续API搜索。
查看Runnable接口说明文档:Runnable接口用来指定每个线程要执行的任务。包含了一个 run 的无参数抽象方法,需要由接口实现类重写该方法。* 1、定义类实现Runnable接口。
2、覆盖接口中的run方法。。
3、创建Thread类的对象
4、将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
5、调用Thread类的start方法开启线程。由于java是单继承,所以再搞一个接口出来实现多线程是非常有意义的!
定义多线程类
public class B_MyThread implements Runnable { int num; public B_MyThread() { } @Override public void run() { for (int i = 0; i < 100; i++) { Thread t = Thread.currentThread();//currentThread() 返回对当前正在执行的线程对象的引用。 System.out.println(t.getName() + ":" + i); /* //链式编程 System.out.println(Thread.currentThread().getName() + ":" + i + num);*/ } } }
主类:
public class B_ThreadMain { public static void main(String[] args) { // TODO Auto-generated method stub //创建线程实例 B_MyThread mt = new B_MyThread(); Thread t = new Thread(mt); t.setName("xu"); t.start(); //创建线程实例 B_MyThread mt2 = new B_MyThread(); Thread t2 = new Thread(mt2); t2.setName("ui"); t2.start(); } }