Java简明教程之——多线程入门

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();
	}
}	

从执行结果中我们可以看到,线程之间互不干扰,各自执行。


猜你喜欢

转载自blog.csdn.net/pbrlovejava/article/details/80469959
今日推荐