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

    xiaoxiao2021-12-10  8

    <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.csdn.net/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.csdn.net/jhualee0707/article/details/51924247              *********end

    转载请注明原文地址: https://ju.6miu.com/read-700425.html

    最新回复(0)