java 创建线程的两种方法

java 多线程的创建

什么是进程,什么是线程就不多说了,直接上简单易懂的代码,最后进行说明。

两种方法: 继承Thread 和 实现Runnable 接口
说白了启用线程就是调用对象中的run方法,即:要实现不同的线程功能,重写run方法即可
方法一:

//package xiancheng;

public class ThreadDemo {
	public static void main(String[] args) {
		Thread t = new myThread();  //创建对象,多态的形式
		Thread t2 = new myThread();  
		t2.start();  //把程序变为待续状态(准备激活线程)
		t.start();
	}
}

class myThread extends Thread{
	/**
	 *   重写run的方法
	 */
	@Override
	public void run() {
		for (int i=0;i<20;i++) {
			// 获得线程的名字
			System.out.println(Thread.currentThread().getName()+" --"+i);
			// 睡眠500毫秒 ,try carth 是必须的
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}	
}

结果: 两个线程 哪个最先执行不确定
在这里插入图片描述

方法二:

//package xiancheng;

public class ThreadDemo {
	public static void main(String[] args) {
		//Thread t = new myThread();  //创建对象,多态的形式
		//Thread t2 = new myThread();  
		//t2.start();
		//t.start();
		
		myThread2 mt2 = new myThread2();
		Thread t1 = new Thread(mt2);
		Thread t2 = new Thread(mt2);
		t2.start();
		t1.start();	
	}
}

class myThread2 implements Runnable{
	/**
	 *   重写run的方法
	 */
	@Override
	public void run() {
		for (int i=0;i<20;i++) {
			// 获得线程的名字
			System.out.println(Thread.currentThread().getName()+" --"+i);
			// 睡眠500毫秒 ,try carth 是必须的
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

结果一样,两种代码的分析:
  两个类的内容一模一样,只是一个类继承了Thread类,一个类实现了Runnable接口。
  在启用线程上,第一个方法直接创建Thread对象,第二方法把类的对象作为参数传入到Thread 的对象中,两种写法结果一样,,,但是推荐用第二种方法:

  1. 如果需要继承Thread的类就不能继承其他类了,接口可以多实现
  2. 第二个方法作为参数传入,可以看成是一个任务,在多线程的调用中非常方便,可以任意放入到任意的线程中。

扩展:

Thread 类中的一些常用方法,静态的方法可以用类名调用

Modifier and TypeMethodDescription
static intactiveCount()返回当前线程的thread group及其子组中活动线程数的估计。
static ThreadcurrentThread()返回对当前正在执行的线程对象的引用。
StringgetName()返回此线程的名称。
intgetPriority()返回此线程的优先级。
Thread.StategetState()返回此线程的状态。
ThreadGroupgetThreadGroup()返回此线程所属的线程组。
voidinterrupt()中断这个线程(抛出一个异常)。
static booleaninterrupted()测试当前线程是否中断。
booleanisAlive()测试这个线程是否活着。
booleanisDaemon()测试这个线程是否是守护线程。
booleanisInterrupted()测试这个线程是否被中断。
voidjoin()等待这个线程死亡(重点是等待,)。
voidjoin(long millis)等待这个线程等待最多 millis毫秒。
voidjoin(long millis, int nanos)等待最多 millis毫秒加上 nanos纳秒这个线程死亡。
voidrun()如果这个线程使用单独的Runnable运行对象构造,则调用该Runnable对象的run方法; 否则,此方法不执行任何操作并返回。
voidsetDaemon(boolean on)将此线程标记为 daemon线程或用户线程
voidsetName(String name)将此线程的名称更改为等于参数 name 。
voidsetPriority(int newPriority)更改此线程的优先级(相对的)。
staticvoid sleep(long millis [, int nanos])使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性。
voidstart()导致此线程开始执行; Java虚拟机调用此线程的run方法。
StringtoString()返回此线程的字符串表示,包括线程的名称,优先级和线程组。
static voidyield()对调度程序的一个暗示,即当前线程愿意产生当前使用的处理器。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值