Java并发小实验(一)线程中的Thread类是“自己”的吗?

纯属猜测,有什么不对的地方欢迎指正!

Java并发线程中的Thread类是“自己”的吗?

import java.text.SimpleDateFormat;

public class Main extends Thread {

	private int sleepTime;
	
	public Main(String name, int sleepTime) {
		super(name);
		this.sleepTime = sleepTime;
	}
	
	private static int piao = 15;
	
	@Override
	public void run() {
		for(;piao>0;) {
			System.out.println(getName() + "抢到了第" + piao-- + "张票。" + new SimpleDateFormat("HH:mm:ss.SSS").format(System.currentTimeMillis()));
			try {
				sleep(sleepTime);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) throws InterruptedException {
		
		// 首先,我们让Main类继承Thread类,这样他们肯定会拥有“自己”的sleep方法
		System.out.println("继承线程类,调用自己的sleep方法");
		
		Main t1 = new Main("小明a", 500);
		Main t2 = new Main("小美b", 1000);
		Main t3 = new Main("小刚c", 3000);
		
		t1.start();
		t2.start();
		t3.start();
		
		// 阻塞他们三个,直到都运行完再测试下一个。
		t1.join();
		t2.join();
		t3.join();
		
		// 然后,我们定义一个Other类,去实现Runable接口,这样,Other类中就没有sleep方法,只能调用Thread的静态sleep方法。
		// 所以,按照我的猜测,他们应该是在sleep的时候,大家所有人都被阻塞了?或者只有主线程被阻塞了?那样应该不会影响到他们啊?
		System.out.println("实现Runable接口,调用Thread的sleep方法");
		Thread.sleep(100);
		Other.main();
		// 事实是,执行结果和上面基本一致。
		// 所以,我有理由猜测,Thread是类似于ThreadLocal那样的,每个线程有“自己”的一个Thread类!
		// 或者说,在不同的线程中,调用到的Thread类不是同一个!
		
	}
	
}

class Other implements Runnable {
	
	private int sleepTime;
	
	public Other(int sleepTime) {
		this.sleepTime = sleepTime;
	}
	
	private static int piao = 15;
	
	@Override
	public void run() {
		for(;piao>0;) {
			System.out.println(Thread.currentThread().getName() + "抢到了第" + piao-- + "张票。" + new SimpleDateFormat("HH:mm:ss.SSS").format(System.currentTimeMillis()));
			try {
				Thread.sleep(sleepTime);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public static void main() {
		
		new Thread(new Other(500), "小明d").start();
		new Thread(new Other(1000), "小美e").start();
		new Thread(new Other(3000), "小刚f").start();
		
	}
	
}
运行结果
继承线程类,调用自己的sleep方法
小刚c抢到了第13张票。22:49:48.567
小明a抢到了第15张票。22:49:48.567
小美b抢到了第14张票。22:49:48.568
小明a抢到了第12张票。22:49:49.070
小美b抢到了第11张票。22:49:49.569
小明a抢到了第10张票。22:49:49.571
小明a抢到了第9张票。22:49:50.071
小美b抢到了第8张票。22:49:50.570
小明a抢到了第7张票。22:49:50.572
小明a抢到了第6张票。22:49:51.073
小刚c抢到了第5张票。22:49:51.569
小美b抢到了第4张票。22:49:51.571
小明a抢到了第3张票。22:49:51.573
小明a抢到了第2张票。22:49:52.073
小美b抢到了第1张票。22:49:52.571
实现Runable接口,调用Thread的sleep方法
小美e抢到了第15张票。22:49:54.570
小明d抢到了第14张票。22:49:54.570
小刚f抢到了第13张票。22:49:54.570
小明d抢到了第12张票。22:49:55.070
小美e抢到了第11张票。22:49:55.571
小明d抢到了第11张票。22:49:55.571
小明d抢到了第10张票。22:49:56.073
小美e抢到了第9张票。22:49:56.572
小明d抢到了第8张票。22:49:56.573
小明d抢到了第7张票。22:49:57.074
小刚f抢到了第6张票。22:49:57.571
小美e抢到了第5张票。22:49:57.573
小明d抢到了第4张票。22:49:57.575
小明d抢到了第3张票。22:49:58.075
小美e抢到了第2张票。22:49:58.573
小明d抢到了第1张票。22:49:58.576
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值