Java简明教程之——多线程入门
一、进程与线程
今天要写的是一个关于多线程的教程,首先我们需要理解,什么是线程、什么是进程?在日常生活中,许多事情可以同时进行,例如一个人可以同时听课、玩游戏、甚至是写高数。在应用程序中,不同的程序块也是可以同时运行的,这种多个程序块同时运行的现象被称作并发执行。
那么,什么是进程呢?简单地说,每一个运行中的程序都是一个进程。什么是线程呢?每个进程都需要至少一条执行线索去执行相应的功能,这条“线索”可以被称作线程,如最简单的情况就是,一个java程序只有一个main方法,这个main方法就是一条执行线索,就是一个线程。当然,这样的执行效率不高,我们需要多个执行线索去执行我们的程序,由此衍生出多线程。
二、并发与串行
在生活中,大家去商城买东西,大家可以同时进行购物,这就是并发执行,而在结账时,大家需要排队吧,一个人结完账后再到另一个人结账,这个时候就是串行执行。
三、什么是多线程
多线程就是指一个应用程序中可以有许多并发执行的线索,每条线索都被称之为一个线程。
四、线程的创建
第一种方式:用自定义线程去继承Thread类,然后再调用它
public class MyThread extends Thread{ //重写run方法,方便被调用 @Override public void run() { for(int i = 0;i < 10;i++){ System.out.println("MyThread线程正在执行..."); } } }
public class ThreadTest { public static void main(String[] args) { //创建MyThread这个线程 MyThread myThread = new MyThread(); //启动这个线程中的run方法 myThread.start(); //用main线程输出一条语句 for(int i = 0;i < 10;i++){ System.out.println("main线程正在执行..."); } } }
输出的结果:
可以发现,主线程和MyThread线程是同时执行的,如果不使用多线程,而是使用单线程,如下:
public class ThreadTest { public static void main(String[] args) { //创建MyThread这个对象 MyThread myThread = new MyThread(); //启动这个线程中的run方法 myThread.run(); //用main线程输出一条语句 for(int i = 0;i < 10;i++){ System.out.println("main线程正在执行..."); } } }
在代码中我们仅把MyThread这个类当做普通类来使用,我们会发现程序会顺序执行,即当MyThread的run方法执行完后,才会继续执行main这个线程的输出方法
第二种实现方式:让自定义线程类去实现Runnable接口,并实现run方法
以下是经典的购票例子
public class TicketThread extends Thread{ //定义100张票 private Integer tickets = 100; @Override public void run() { while(tickets > 0){ //获取当前线程的名字 String current_thread = Thread.currentThread().getName(); //模拟售票 System.out.println(current_thread+"正在出售第"+tickets--+"张票"); } } }
public class BuyTicketsTest { public static void main(String[] args) { TicketThread tr = new TicketThread(); //创建5个TicketThread线程并命名,开启并执行线程 new Thread(tr,"窗口1").start(); new Thread(tr,"窗口2").start(); new Thread(tr,"窗口3").start(); new Thread(tr,"窗口4").start(); new Thread(tr,"窗口5").start(); } }
从执行结果中我们可以看到,线程之间互不干扰,各自执行。