Java中线程的使用讲解

本文介绍了Java中的线程概念,通过实例展示了继承Thread类和实现Runnable接口两种创建线程的方法,并对比了它们在处理共享资源时的不同效果。
摘要由CSDN通过智能技术生成

1.什么是线程

在讲解线程前让我们了解一下进程是什么

进程:在操作系统中每一个独立执行的程序都可以被称为一个进程,也就是正在运行的程序,我们可以同时按下CTRL+shift+esc打开任务管理器,便可以看到电脑正在运行的进程。

线程

在一个进程中还可以有多个执行单元同时运行,这些执行单元可以看作程序执行的一条条线索,称为线程

2.线程的创建

Java中提供了两种多线程实现方法fangfa 

1.第一种是继承java.lang包下的Thread类,重写Thread类的run()方法,在run()方法中实现运行在线程上的代码

        1.在学习多线程前线熟悉一下单线程,便于我们比较学习

public class Example01 {
	public static void main(String[] args){
		MyThread myThread =  new MyThread();
		myThread.run();
		while(true){
			System.out.println("main方法正在运行");
		}
	}

}
class MyThread {
	public void run(){
		while(true){
			System.out.println("MyThread类的run()方法在运行");
		}
	}
}

单线程结果

单线程注解:由于此代码并没有实现多线程,所以当代码运行到run()方法时由于此方法中存在死循环,导致代码不能运行下面的代码

        2.接下来我们学习实现多线程的第一种方法

public class Example02 {
		public static void main(String[] args){
			MyThread1 myThread1 =  new MyThread1();
			myThread1.start();
			while(true){
				System.out.println("main方法正在运行");
			}
		}

	}
	class MyThread1 extends Thread{
		public void run(){
			while(true){
				System.out.println("MyThread类的run()方法在运行");
			}
		}
	}

运行结果

多线程方法一注解:

        代码中继承了Thread类,实现了多线程,这时虽然代码run()方法中是死循环,结果中依然出现了下面代码的结果,这便体现了多个线程可以同时进行的特点

2.实现java.lang.Runnable接口,同样是在run()方法中实现运行在线程的代码

public class Example03 {
	public static void mian(String[] args){
		MyThread3 myThread3 = new MyThread3();
		Thread thread = new Thread(myThread3);
		thread.start();
		while(true){
			System.out.println("main方法正在运行");
		}
	}

}
class MyThread3 implements Runnable{
	public void run(){
		while(true){
			System.out.println("MyThread正在运行run()方法");
		}
	}
}

运行结果

多线程方法二注解:代码中通过实现Runnable接口实现了多线程,同样得到了和方法一相同的结果

3.两种实现多线程方法的对比分析

下面通过一中场景来分析

假设售票厅有4个窗口可发售某日某车的100张车票,这100张票可以看成共享资源,4个窗口需要创建四个线程。

方法一实现如下

public class Example04 {
	public static void main(String[] args){
		new TicketWindow().start();
		new TicketWindow().start();
		new TicketWindow().start();
		new TicketWindow().start();
		
	}

}
class TicketWindow extends Thread{
	private int ticket = 100;
	public void run(){
		while(true){
			if(ticket>0){
				Thread th = Thread.currentThread();
				String th_name = th.getName();
				System.out.println(th_name+"正在发售第"+ticket-- +"张票");
			}
		}
	}
}

 运行结果如下

结果注解:很明显结果中出现了四个窗口分别卖出了同一张票,由此我们可以得知这里的4个线程并没有共享100张票这一资源

方法二实现如下

public class Example05 {
	public static void main(String[] args){
		TicketWindow1 tw = new TicketWindow1();
		new Thread(tw,"窗口一").start();
		new Thread(tw,"窗口二").start();
		new Thread(tw,"窗口三").start();
		new Thread(tw,"窗口四").start();
		
	}

}
class TicketWindow1 implements Runnable{
	private int ticket = 100;
	public void run(){
		while(true){if(ticket>0){
			Thread th = Thread.currentThread();
			String th_name = th.getName();
			System.out.println(th_name+"正在发售第"+ticket-- +"张票");
		}}
		
	}
	
}

运行结果注解:结果中很显然是四个窗口共同将100张票卖出,四个进程是共享了100张票这一资源的

分析结论:通过两方法对比可以得出方法二可以使多线程对资源共享,而方法一却不能

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值