JAVA线程系列教程<2>-线程的两种实现方式

<1,老生常谈,继承自Thread类






public class TestThead extends Thread {
	

	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("我是继承自Thread类,我是他的run方法");
	}

	/**
	 * @param args
	 * @throws InterruptedException 
	 */
	public static void main(String[] args) throws InterruptedException {
		ThreadGroup tg=new ThreadGroup("示例线程组");
		// TODO Auto-generated method stub
		TestThead tt=new TestThead();
		tt.start();
		tt.sleep(2000);
		//优先级
	    int priority=tt.getPriority();
	    //名称
	    String name=tt.getName();
	    //id
	    long id=tt.getId();
	    System.out.println("此线程的优先级是"+priority+"  此线程的名称"+name+"  此线程的id"+id);
	    
	    //栈追踪元
	    StackTraceElement[] arr=tt.getStackTrace();
	    for(StackTraceElement ele:arr){
	    	String eleClassName=ele.getClassName();
	    	String FileName=ele.getFileName();
	    	int lineNumber=ele.getLineNumber();
	    	String eleMethodName=ele.getMethodName();
	    	System.out.println("栈追踪元eleClassName="+eleClassName+"   FileName"+FileName
	    			+"  lineNumber="+lineNumber+"   eleMethodName"+eleMethodName);              
	    }
	    //所属线程组
	    ThreadGroup group= tt.getThreadGroup();
	    if(group!=null){
		    int maxPriority=group.getMaxPriority();
		    String groupName=group.getName();
		    System.out.println("最大优先级"+maxPriority+" groupName"+groupName);
	    }
	}

}






2,实现Runnable

public class TestRunnable implements Runnable{

	@Override
	public void run() {
       System.out.println("我实现了Runnable接口");		
	}
	
	public static void main(String[] args) throws InterruptedException{
		TestRunnable tr=new TestRunnable();
		ThreadGroup tg=new ThreadGroup("线程组1");
		Thread tt=new Thread(tg,tr,"线程1");
		tt.start();
		tt.sleep(2000);
		//优先级
	    int priority=tt.getPriority();
	    //名称
	    String name=tt.getName();
	    //id
	    long id=tt.getId();
	    System.out.println("此线程的优先级是"+priority+"  此线程的名称"+name+"  此线程的id"+id);
	    
	    //栈追踪元
	    StackTraceElement[] arr=tt.getStackTrace();
	    for(StackTraceElement ele:arr){
	    	String eleClassName=ele.getClassName();
	    	String FileName=ele.getFileName();
	    	int lineNumber=ele.getLineNumber();
	    	String eleMethodName=ele.getMethodName();
	    	System.out.println("栈追踪元eleClassName="+eleClassName+"   FileName"+FileName
	    			+"  lineNumber="+lineNumber+"   eleMethodName"+eleMethodName);              
	    }
	    //所属线程组
	    ThreadGroup group= tt.getThreadGroup();
	    if(group!=null){
		    int maxPriority=group.getMaxPriority();
		    String groupName=group.getName();
		    System.out.println("最大优先级"+maxPriority+" groupName"+groupName);
	    }
	}
     
}


两种实现方式老生常谈,此处不再细说,供基础学习者参考。


以下引用自:http://blog.youkuaiyun.com/jhualee0707/article/details/51924247         *********start

一、定义线程

1、扩展java.lang.Thread类。

此类中有个run()方法,应该注意其用法:
public void run()
如果该线程是使用独立的Runnable运行对象构造的,则调用该Runnable对象的run方法;否则,该方法不执行任何操作并返回。

Thread的子类应该重写该方法。

2、实现java.lang.Runnable接口。
void run();
使用实现接口Runnable的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的run方法。
方法run的常规协定是,它可能执行任何所需的操作。
二、实例化线程
1、如果是扩展java.lang.Thread类的线程,则直接new即可。

2、如果是实现了java.lang.Runnable接口的类,则用Thread的构造方法:

Thread(Runnable target) 
Thread(Runnable target, String name) 
Thread(ThreadGroup group, Runnable target) 
Thread(ThreadGroup group, Runnable target, String name) 
Thread(ThreadGroup group, Runnable target, String name, long stackSize)

三、启动线程

在线程的Thread对象上调用start()方法,而不是run()或者别的方法。

在调用start()方法之前:线程处于新状态中,新状态指有一个Thread对象,但还没有一个真正的线程。

在调用start()方法之后:发生了一系列复杂的事情
启动新的执行线程(具有新的调用栈);
该线程从新状态转移到可运行状态;
当该线程获得机会执行时,其目标run()方法将运行。
注意:对Java来说,run()方法没有任何特别之处。像main()方法一样,它只是新线程知道调用的方法名称(和签名)。因此,在Runnable上或者Thread上调用run方法是合法的。但并不启动新的线程。

以上引用自:http://blog.youkuaiyun.com/jhualee0707/article/details/51924247              *********end






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知乎关注八戒来了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值