线程基础—线程的创建

从保定回来之后,听了小康讲的线程,发现我已经很久没有复习java基础了,对其中很多知识都有了陌生感。趁着空闲的两天看了一下线程的基础知识。

一 :程序、进程、线程的概念

程序(program)是为完成特定任务,用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象;

进程(process)是程序的一次执行过程,或是正在运行的一个程序。动态过程:有它自身的产生、存在和消亡的过程。

如:运行中的QQ,运行中的播放器,同时程序是静态的,进程是动态的。

线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。

若一个程序可同时执行多个线程,就是支持多线程的。

何时需要多线程?

程序需要同时执行两个或多个任务;

程序需要实现一些需要等待的任务时,如用户输入、文件读写操作等;

需要一些后台运行的程序时。

二:多线程的创建和使用

多线程的创建有两种方式:一种是继承,一种是实现。

1.继承Thread类

java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来实现。每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体。通过该Thread对象的start()方法来调用这个线程。

线程类

<span style="font-family:KaiTi_GB2312;">// 1.创建一个继承于Thread的子类
class SubThread extends Thread{
	//2.重写Thread类的run()方法,方法内实现此子线程要完成的功能
	public void run(){
		for(int i=0;i <= 100;i++){
			System.out.println(Thread.currentThread().getName()+":"+i);
		}
	}
}
</span>
main()方法调用

<span style="font-family:KaiTi_GB2312;">public class TestThread {
	public static void main(String[] args){
		//3.创建一个子类的对象
		SubThread st1 =new SubThread();
		SubThread st2 =new SubThread();
		
		//4.调用线程的start();启动此线程;调用相应的run()方法
		//5.一个线程只能执行一次start()
		st1.start();
		st2.start();
		
		for(int i=0;i <= 100;i++){
			System.out.println(Thread.currentThread().getName()+":"+i);
		}
	}
}
</span>

2.实现Runnable接口

Thread类也是实现了Runnable接口,实现Runnable接口也需重写run方法。

线程类:

<span style="font-family:KaiTi_GB2312;">	 class PrintNum1 implements Runnable{
		 // 1.实现接口的抽象方法
		public void run(){
			for(int i=1;i<=100;i++){
				if(i % 2 ==0){
					System.out.println(Thread.currentThread().getName() +":"+i);
				}
			}
		}
	}
</span>
main()方法调用

<span style="font-family:KaiTi_GB2312;">	调用的时候该类做参数传递即可
	 public class TestThread2{
		public static void main(String[] args){
			PrintNum1 p =new PrintNum1();
			//要想启动一个多线程,必须调用start()
			
			// 4.将此对象作为形参传递给Thread类的构造器中,创建Thread类的对象
			Thread t1 =new Thread(p);
	
			// 5.调用start()方法,启动线程并执行run()
			t1.start();// 启动线程,执行Thread对象生成时构造器形参的对象的run()方法
		}
	}
</span>

通过两种方式可以看出第二种方式比第一种好。因为实现优于继承。通过实现Runnable接口,避免了java单继承的局限性,同时如果多个线程要操作同一份资源,此时更适合实现的方式。

而通过继承Thread类的方式,如果多个线程操作的话,需要实例化多个子类线程,而其共享的资源就会声明为static,会一直存在于内存。而实现Runnable接口的方式,实例化一个类,将其作为参数传递给不同的线程既可。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值