java 线程(一) 线程创建以及启动

本文深入探讨Java中创建线程的两种主要方式:通过继承Thread类和实现Runnable接口,并通过示例代码展示各自的特点与区别。重点强调了Thread方式与Runnable方式在多线程应用开发中的应用,揭示了实现runnable方式的普遍性及其优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java中有两种方式进行线程的创建

1. 继承thread类创建线程类

  步骤:重写Thread类的run方法,也就是线程执行体;创建Thread的子类,也就是创建线程对象;调用start方法记性启动。

   //通过继承Thread类来创建线程类

public class FirstThread extends Thread{
	private int i ;
	//重写run方法,run方法的方法体就是线程执行体
	public void run()
	{
		for ( ; i < 100 ; i++ )
		{
			//当线程类继承Thread类时,可以直接调用getName()方法来返回当前线程的名。
			//如果想获取当前线程,直接使用this即可
			//Thread对象的getName返回当前该线程的名字
			System.out.println(getName() +  " " + i);
		}
	}
	
    public static void main(String[] args) 
    {
        for (int i = 0; i < 100;  i++)
        {
			//调用Thread的currentThread方法获取当前线程
			System.out.println(Thread.currentThread().getName() +  " " + i);
			if (i == 20)
			{
				//创建、并启动第一条线程
				new FirstThread().start();
				//创建、并启动第二条线程
				new FirstThread().start();
			}
        }
    }
}
 

 结果是: 

    Thread-0 53

Thread-1 4
Thread-0 54
main 25
Thread-0 55
Thread-1 5
Thread-0 56
Thread-0 57

  可以发现:创建的2个线程是没有共享一个i数据的

2. 实现Runnable接口创建创建线程类

创建步骤:编写实现Runnable接口的实现类;并重写run方法,也就是线程执行体;创建该实现类的实例对象,以此作为Thread的target进行Thread对象的创建,此时的对象才是真正的线程对象

//通过实现Runnable接口来创建线程类
public class SecondThread implements Runnable
{
	private int i ;
	//run方法同样是线程执行体
	public void run()
	{
		for ( i=0; i < 100 ; i++ )
		{
			//当线程类实现Runnable接口时,
			//如果想获取当前线程,只能用Thread.currentThread()方法。
			System.out.println(Thread.currentThread().getName() + "  " + i);
		}
	}
	
    public static void main(String[] args) 
    {
        for (int i = 0; i < 100;  i++)
        {
			System.out.println(Thread.currentThread().getName() + "  " + i);
			if (i == 20)
			{
				SecondThread st = new SecondThread();
				//通过new Thread(target , name)方法创建新线程
				new Thread(st , "新线程1").start();
				new Thread(st , "新线程2").start();
			}
        }
    }
}
 

 

 

结果:新线程1 52

新线程2  51
新线程1  53
main  31
新线程1  55
新线程2  54
新线程1  56

 


可以发现,两个线程对象是共享一个数据资源的

总结:比较两种方式的区别

        Thread方式:已经继承了THread类,所以不能继承其他父类,但是编写简单

        Runnable方式:实现了Runnable接口,还可以继承其他类;可以多个线程共享同一份资源;编写相对复杂

而事实上,普遍都使用实现runnable方式去进行多线程应用开发。













 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值