JAVA多线程编程(一)——线程的创建方式

JAVA多线程编程(一)——线程的创建方式

首先,多线程的创建有两种方式

1. 继承Thread类,实现run方法; 2. 实现runnable接口

(第一种方法是不推荐的方法,因为它只能单继承,有局限性。第二种方法适合多个线去处理同一个资源的情况,把线程同程序的代码,数据有效的分离,体现了面向对像的思想)

JDK文档创建新执行线程有两种方法。一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。

第一种方法创建多线程的步骤:

 (1). 创建自定义的类MyThread继承Thread类;

 (2). 在自定义类中Overrie/重写/实现run()方法;

 (3). 创建MyThread类的对像;

 (4). 启动线程对像;

a: 为什么要重写run()方法? run()方法里面封装的是线程执行的代码

b: 启动线程对像时用的是哪个方法?new MyThread(). start()

c: run()start()方法的区别?  start()先启动线程然后再由JVM调用run()


典型的程序结构如下:

package Thread;


import java.lang.Thread;

class MyThread extends Thread{
	
	public void run()
	{
		while(true)
		{
    		System.out.println(Thread.currentThread().getName());
    		try
    		{
    			Thread.sleep(1000);
    		} catch (InterruptedException e)
    		{
    			// TODO 自动生成的 catch 块
    			e.printStackTrace();
    		}
		}
	}
}

public class ThreadTest{
	
	public static void main(String[] args)
	{
		MyThread t1 = new MyThread();
		
		MyThread t2 = new MyThread();
		
		MyThread t3 = new MyThread();
		
		t1.start();
		t2.start();
		t3.start();
	}
}

第二种方法创建多线程程序的步骤:

(1). 创建自定义线程类MyThread实现Runnable接口;

(2). MyThread类里面Overried/重写run()

(3). 创建MyThread类的对像;

(4). 创建Thread类的对像,并把上一步中创建的对像作为构造函数参数传递;

package Thread;


class MyThread1 implements Runnable{
	
	public void run()
	{
		while(true)
		{
			System.out.println(Thread.currentThread().getName());
			
			try
			{
				Thread.sleep(1000);
			}
			catch (InterruptedException e)
			{
				e.printStackTrace();
			}
		}
	}
}

public class ThreadTest1
{

	public static void main(String[] args)
	{
		//自定义线程,实现Runnable接口
		MyThread1 t = new MyThread1();
		
		//创建线程并把实现Runnable接口的类的对像作为参数传递
		Thread t1 = new Thread(t);
		Thread t2 = new Thread(t);
		Thread t3 = new Thread(t);
		
		//启动线程
		t1.start();
		t2.start();
		t3.start();
	}
}

实现Runable接口相对于继承Thread类来说有如下优点:

1. 适合多个相同程序代码的线程去处理同一资源的情况,把虚拟的CPU(线程)同程序的代码,数据有效分离,较好的体现了面向对像的设计思想。

2. 可以避免JAVA单继承特性带来的局限。比如,一个类已继承自另一个类,而又要将这个类放入多线程中,那这个类还需要继承Thread类,但是JAVA只能单继承,所以只能用接口的方式来实现。

3. 有利于程序的健壮性,代码能够被多个线程共享,代码与数据是相互独立的。当多个线程的执行代码来自同一个类的实例时,即称它们共享相同的代码。多个线程可以操作相同的数据,与他们的代码无关。当共享访问相同的对像时,即共享相同的数据。当线程被构造时,需要的代码和数据通过一个对像作为构造函数实参传递进去,这个对像就是一个实现了Runnable接口的类的实例。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值