java并发编程从入门到精通----2.认识java中的Thread(上)

线程实现的3种方法

终于要写代码了!!!

1.继承Thread覆run()方法

public class ThreadA extends Thread {
	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
		try {
			Thread.sleep(500L);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("这是线程A,通过继承Thead实现");
	}
	

	public static void main(String[] args) {
		ThreadA threadA=new ThreadA();
		threadA.start();//启动线程
		System.out.println("这是主线程********");

	}

}

结果: 

这是主线程********
这是线程A,通过继承Thead实现

2.实现runable接口

public class ThreadB implements Runnable {

	@Override
	public void run() {
		try {
			//休息几分钟
			Thread.sleep(500L);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("这是线程B");
	}

	public static void main(String[] args) {
		ThreadB threadB = new ThreadB();
		new Thread(threadB).start();
		System.out.println("这是主线程");
	}
}

结果 

这是主线程
这是线程B

3.实现callable接口

public class ThreadC implements Callable<String> {

	@Override
	public String call() throws Exception {
		Thread.sleep(500L);
		System.out.println("这线程C");
		return "this is ThreadC";
	}

	public static void main(String[] args) {
		ThreadC threadC = new ThreadC();
		FutureTask<String> futureTask = new FutureTask<String>(threadC);
		new Thread(futureTask).start();// 启动线程
		System.out.println("this is main thread:beginning.........");
		try {
			System.out.println("返回结果:" + futureTask.get());
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ExecutionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		System.out.println("this is main thread:end.........");

	}
}

结果 

this is main thread:beginning.........
这线程C
返回结果:this is ThreadC
this is main thread:end.........

 Thread的基本属性

依然是贴图。。。。

 

下面我们写几个代码说明一下Thread的几个属性

public class ThreadB implements Runnable {

	@Override
	public void run() {

		Thread curthread = Thread.currentThread();
		System.out.println("返回当前线程的名称" + curthread.getName());
		System.out.println("返回当前线程" + curthread.getName() + " 线程组活动数:" + Thread.activeCount());
		System.out.println("返回当前线程" + curthread.getName() + " 标识符:" + curthread.getId());
		System.out.println("返回当前线程" + curthread.getName() + " 优先级:" + curthread.getPriority());
		System.out.println("返回当前线程" + curthread.getName() + " 状态:" + curthread.getState());
		System.out.println("返回当前线程" + curthread.getName() + " 线程组:" + curthread.getThreadGroup());
		System.out.println("返回当前线程" + curthread.getName() + " 是否活跃:" + curthread.isAlive());
		System.out.println("返回当前线程" + curthread.getName() + " 是否守护进程:" + curthread.isDaemon());
	}

	public static void main(String[] args) {
		ThreadB threadB = new ThreadB();
		for (int i = 0; i < 10; i++) {
			new Thread(threadB,"name: ("+i+")").start();
		}
		Thread mainthread=Thread.currentThread();
		System.out.println("返回当前线程的名称" + mainthread.getName());
		System.out.println("返回当前线程" + mainthread.getName() + " 线程组活动数:" + Thread.activeCount());
		System.out.println("返回当前线程" + mainthread.getName() + " 标识符:" + mainthread.getId());
		System.out.println("返回当前线程" + mainthread.getName() + " 优先级:" + mainthread.getPriority());
		System.out.println("返回当前线程" + mainthread.getName() + " 状态:" + mainthread.getState());
		System.out.println("返回当前线程" + mainthread.getName() + " 线程组:" + mainthread.getThreadGroup());
		System.out.println("返回当前线程" + mainthread.getName() + " 是否活跃:" + mainthread.isAlive());
		System.out.println("返回当前线程" + mainthread.getName() + " 是否守护进程:" + mainthread.isDaemon());
		
	}

}

 结果:

返回当前线程的名称name: (0)
返回当前线程的名称main
返回当前线程main 线程组活动数:11
返回当前线程main 标识符:1
返回当前线程main 优先级:5
返回当前线程的名称name: (2)
返回当前线程name: (2) 线程组活动数:11
返回当前线程name: (2) 标识符:10
返回当前线程name: (2) 优先级:5
返回当前线程的名称name: (1)
返回当前线程name: (1) 线程组活动数:11
返回当前线程name: (1) 标识符:9
返回当前线程name: (1) 优先级:5
返回当前线程name: (0) 线程组活动数:11
返回当前线程name: (0) 标识符:8
返回当前线程name: (0) 优先级:5
返回当前线程的名称name: (3)
返回当前线程name: (3) 线程组活动数:11
返回当前线程name: (3) 标识符:11
返回当前线程name: (3) 优先级:5
返回当前线程的名称name: (4)
返回当前线程name: (4) 线程组活动数:11
返回当前线程name: (4) 标识符:12
返回当前线程name: (4) 优先级:5
返回当前线程的名称name: (5)
返回当前线程name: (5) 线程组活动数:11
返回当前线程name: (5) 标识符:13
返回当前线程name: (5) 优先级:5
返回当前线程的名称name: (7)
返回当前线程name: (7) 线程组活动数:11
返回当前线程name: (7) 标识符:15
返回当前线程name: (7) 优先级:5
返回当前线程的名称name: (8)
返回当前线程name: (8) 线程组活动数:11
返回当前线程name: (8) 标识符:16
返回当前线程name: (8) 优先级:5
返回当前线程的名称name: (6)
返回当前线程的名称name: (9)
返回当前线程name: (9) 线程组活动数:11
返回当前线程name: (9) 标识符:17
返回当前线程name: (9) 优先级:5
返回当前线程name: (6) 线程组活动数:11
返回当前线程name: (6) 标识符:14
返回当前线程name: (6) 优先级:5
返回当前线程main 状态:RUNNABLE
返回当前线程name: (4) 状态:RUNNABLE
返回当前线程main 线程组:java.lang.ThreadGroup[name=main,maxpri=10]
返回当前线程main 是否活跃:true
返回当前线程main 是否守护进程:false
返回当前线程name: (3) 状态:RUNNABLE
返回当前线程name: (3) 线程组:java.lang.ThreadGroup[name=main,maxpri=10]
返回当前线程name: (3) 是否活跃:true
返回当前线程name: (3) 是否守护进程:false
返回当前线程name: (6) 状态:RUNNABLE
返回当前线程name: (6) 线程组:java.lang.ThreadGroup[name=main,maxpri=10]
返回当前线程name: (6) 是否活跃:true
返回当前线程name: (6) 是否守护进程:false
返回当前线程name: (9) 状态:RUNNABLE
返回当前线程name: (9) 线程组:java.lang.ThreadGroup[name=main,maxpri=10]
返回当前线程name: (9) 是否活跃:true
返回当前线程name: (9) 是否守护进程:false
返回当前线程name: (1) 状态:RUNNABLE
返回当前线程name: (1) 线程组:java.lang.ThreadGroup[name=main,maxpri=10]
返回当前线程name: (1) 是否活跃:true
返回当前线程name: (1) 是否守护进程:false
返回当前线程name: (5) 状态:RUNNABLE
返回当前线程name: (5) 线程组:java.lang.ThreadGroup[name=main,maxpri=10]
返回当前线程name: (5) 是否活跃:true
返回当前线程name: (5) 是否守护进程:false
返回当前线程name: (7) 状态:RUNNABLE
返回当前线程name: (7) 线程组:java.lang.ThreadGroup[name=main,maxpri=10]
返回当前线程name: (7) 是否活跃:true
返回当前线程name: (7) 是否守护进程:false
返回当前线程name: (8) 状态:RUNNABLE
返回当前线程name: (8) 线程组:java.lang.ThreadGroup[name=main,maxpri=10]
返回当前线程name: (8) 是否活跃:true
返回当前线程name: (8) 是否守护进程:false
返回当前线程name: (2) 状态:RUNNABLE
返回当前线程name: (2) 线程组:java.lang.ThreadGroup[name=main,maxpri=10]
返回当前线程name: (2) 是否活跃:true
返回当前线程name: (2) 是否守护进程:false
返回当前线程name: (0) 状态:RUNNABLE
返回当前线程name: (0) 线程组:java.lang.ThreadGroup[name=main,maxpri=10]
返回当前线程name: (0) 是否活跃:true
返回当前线程name: (0) 是否守护进程:false
返回当前线程name: (4) 线程组:java.lang.ThreadGroup[name=main,maxpri=10]
返回当前线程name: (4) 是否活跃:true
返回当前线程name: (4) 是否守护进程:false
 

 由于篇幅的限制,这里就介绍Thread的实现方法和几个属性,就当是多线程的入门吧!!下面的文章就深入的理解线程的中断和生命周期,守护线程和线程组。

猜你喜欢

转载自blog.csdn.net/weixin_40657079/article/details/81838110
今日推荐