java线程模式

今天学习了java的多线程,害怕自己的猪脑子,把今天所学的都忘了,赶紧写篇博客加深一下印象。

有两种创建线程的方法,一个是通过Thread类,一个是通过Runnable接口创建。

先说一下用Thread类怎么创建线程


       java通过Thread类将线程所必须的功能都封装起来,想要创建一个线程,只需要创建一个类继承Thread类,然后重写Thread类里的run()方法就可以了。

public class ThreadTest extends Thread{

	@Override
	public void run() {
		super.run();
		System.out.println(this.getName());
	}
	public static void main(String[] args) {
		System.out.println(Thread.currentThread().getName());
		
		Thread thread1 = new ThreadTest();
		Thread thread2 = new ThreadTest();
		
		thread1.start();
		thread2.start();
	}

}

       通过Thread类创建线程的代码如上:在上述代码中建立了thread1和thread2两个线程,start()方法是负责建立线程的。当调用start()方法时,系统会自动调用run方法,然后run方法中的this.getName()方法输出了当前线程的名字,由于在建立的线程时没有指定线程的名字,因此所输出的线程名是系统默认的,也就是Thread-n 的形式。上述代码执行后输出:

main
Thread-0
Thread-1

注意:任何一个java程序都必有一个主线程。一般这个主线程的名字为main。只有在程序中建立另外的线程,才能算是真正的多线程程序,也就是说,多线程程序必须拥有一个以上的线程。

看过上面代码你可能会考虑,如果我不想使用系统默认的线程名字,想用自己的给线程气的名字该怎么办呢?其实在Thread类中有很多的构造方法。有的构造方法可以设置线程名字。也可以通过setName()方法来设置线程名字。使用Thread类创建线程简单的说完了,下面在说一下另一种方法:

使用Runnable接口创建线程

       使用Runnable接口创建线程的过程分为两步

       1、将实现Runnable接口的类实例化。

       2、建立一个Thread对象,并将第一步实例化后的对象作为参数传入Thread类的构造方法,最后通过Thread类的start()方法建立线程。

看一下代码的简单实现:

public class ThreadTest implements Runnable{

	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName());
	}
	public static void main(String[] args) {
		System.out.println(Thread.currentThread().getName());
		
		ThreadTest runnable1 = new ThreadTest();
		ThreadTest runnable2 = new ThreadTest();
		
		Thread thread1 = new Thread(runnable1,"ThreadTest1");
		Thread thread2 = new Thread(runnable2);
		thread2.setName("ThreadTest2");
		
		thread1.start();
		thread2.start();
	}
}
在上述代码中我们创建了runnable1和runnable2两个对象,并且以参数的形式传入到Thread类的两个构造方法中,thread1通过构造方法来设置线程的名字,thread2通过setName()方法来设置线程的名字运行start()方法。和上面讲说的步骤一样。运行一下。运行的结果如下:

main
ThreadTest1
ThreadTest2

很完美所出现的结果和我们所预想的一样,看来没什么错误了。

其中Thread.currentThread();该方法是Thread类的静态方法,它总是返回当前正在执行的线程对象。

       好了java创建线程的两种方法已经实现完毕,可能你会很好奇为什么java会提供两种创建线程的办法呢?这两种有什么不一样呢?好吧给大家说一下我的理解:

       其实这两种方法在本质上说是一种方法,即都是通过Thread类来创建线程,并运行run方法。但是他们的大区别是一个是用继承,一个是使用接口实现。因为java不支持多继承所以当你继承了Thread时就不能继承其他类了,因此java提供了Runnable接口的方法来建立线程,这样线程类可以在有必要的时候继承和业务有关的类,而不是Thread类。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值