start(),run()
都是Thread 类里的静态方法。 要使用他们要先继承 或用implements 去执行Runnable 后使用thread
当通常我们要继承出自己的线程类,然后把自己要在线程中执行的任务写在run方法里面,覆盖父类中的run()方法。如:
public class MyThread extends Thread{
public void run(){
for(int i=0; iSystem.out.println("Hello World!");
}
}
}
最近整理的jdk1.8最新方法,详细具体用法下载个1.8手册看看就可以
Thread()、Thread(Runnable target)、Thread(Runnable target, String name)、Thread(String name)、Thread(ThreadGroup group, Runnable target)、Thread(ThreadGroup group, Runnable target, String name)、Thread(ThreadGroup group, Runnable target, String name, long stackSize)、Thread(ThreadGroup group, String name)、static int activeCount()、void checkAccess()、static、Thread currentThread()、static void dumpStack()、static int enumerate(Thread[] tarray)、static MapgetAllStackTraces()、ClassLoader getContextClassLoader()、static Thread. ()、long getId()、String getName()、int getPriority()、StackTraceElement[] getStackTrace()、Thread.State、getState()、ThreadGroup getThreadGroup()、Thread.()、void interrupt()、static boolean interrupted()、boolean isAlive()、boolean isDaemon()、boolean isInterrupted()、void join()、void join(long millis)、void join(long millis, int nanos)、void run()、void setContextClassLoader(ClassLoader cl)、void setDaemon(boolean on)、static void (Thread. eh)、void setName(String name)、void setPriority(int newPriority)、void (Thread. eh)、static void sleep(long millis)、static void sleep(long millis, int nanos)、void start()、String toString()、static void yield()
构造方法摘要 Thread() 分配新的 Thread 对象。
Thread(Runnable target) 分配新的 Thread 对象。 Thread(Runnable target, String name) 分配新的 Thread 对象。
Thread(String name) 分配新的 Thread 对象。 Thread(ThreadGroup group, Runnable target) 分配新的 Thread 对象。
Thread(ThreadGroup group, Runnable target, String name) 分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,并作为 group 所引用的线程组的一员。 Thread(ThreadGroup group, Runnable target, String name, long stackSize) 分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈尺寸。
Thread(ThreadGroup group, String name) 分配新的 Thread 对象。 方法摘要 static int activeCount() 返回当前线程的线程组中活动线程的数目。
void checkAccess() 判定当前运行的线程是否有权修改该线程。 int countStackFrames() 已过时。
该调用的定义依赖于 suspend(),但它遭到了反对。此外,该调用的结果从来都不是意义明确的。
static Thread currentThread() 返回对当前正在执行的线程对象的引用。 void destroy() 已过时。
该方法最初用于破坏该线程,但不作任何清除。它所保持的任何监视器都会保持锁定状态。
不过,该方法决不会被实现。即使要实现,它也极有可能以 suspend() 方式被死锁。
如果目标线程被破坏时保持一个保护关键系统资源的锁,则任何线程在任何时候都无法再次访问该资源。如果另一个线程曾试图锁定该资源,则会出现死锁。
这类死锁通常会证明它们自己是“冻结”的进程。有关更多信息,请参阅为何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反对?。
static void dumpStack() 打印当前线程的堆栈跟踪。 static int enumerate(Thread[] tarray) 将当前线程的线程组及其子组中的每一个活动线程复制到指定的数组中。
static Map getAllStackTraces() 返回所有活动线程的堆栈跟踪的一个映射。 ClassLoader getContextClassLoader() 返回该线程的上下文 ClassLoader。
static Thread. () 返回线程由于未捕获到异常而突然终止时调用的默认处理程序。 long getId() 返回该线程的标识符。
String getName() 返回该线程的名称。 int getPriority() 返回线程的优先级。
StackTraceElement[] getStackTrace() 返回一个表示该线程堆栈转储的堆栈跟踪元素数组。 Thread.State getState() 返回该线程的状态。
ThreadGroup getThreadGroup() 返回该线程所属的线程组。 Thread. () 返回该线程由于未捕获到异常而突然终止时调用的处理程序。
static boolean holdsLock(Object obj) 当且仅当当前线程在指定的对象上保持监视器锁时,才返回 true。 void interrupt() 中断线程。
static boolean interrupted() 测试当前线程是否已经中断。 boolean isAlive() 测试线程是否处于活动状态。
boolean isDaemon() 测试该线程是否为守护线程。 boolean isInterrupted() 测试线程是否已经中断。
void join() 等待该线程终止。 void join(long millis) 等待该线程终止的时间最长为 millis 毫秒。
void join(long millis, int nanos) 等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。 void resume() 已过时。
该方法只与 suspend() 一起使用,但 suspend() 已经遭到反对,因为它具有死锁倾向。有关更多信息,请参阅为何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反对?。
void run() 如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。 void setContextClassLoader(ClassLoader cl) 设置该线程的上下文 ClassLoader。
void setDaemon(boolean on) 将该线程标记为守护线程或用户线程。 static void (Thread. eh) 设置当线程由于未捕获到异常而突然终止,并且没有为该线程定义其他处理程序时所调用的默认处理程序。
void setName(String name) 改变线程名称,使之与参数 name 相同。 void setPriority(int newPriority) 更改线程的优先级。
void (Thread. eh) 设置该线程由于未捕获到异常而突然终止时调用的处理程序。 static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。
static void sleep(long millis, int nanos) 在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行)。 void start() 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
void stop() 已过时。 该方法具有固有的不安全性。
用 Thread.stop 来终止线程将释放它已经锁定的所有监视器(作为沿堆栈向上传播的未检查 ThreadDeath 异常的一个自然后果)。如果以前受这些监视器保护。
你可以查看相关的api文档
给你一个源程序看看.
public class StudyThread{
public static void main(String args[]){
new NewThread1("1",1);
new NewThread1("2",5);
new NewThread1("3",7);
new NewThread1("4",10);
System.out.print("主线程启动!");
for(int i=0;i<100;i++){
System.out.print(" ---> ");
}
System.out.print("主线程结束!");
}
}
class NewThread1 implements Runnable{
NewThread1(String threadName,int n){
name=threadName;
t=new Thread(this,name);
t.setPriority(n);
System.out.print(" 新线程"+name+"启动 ");
t.start();
}
public void run(){
for(int i=0;i<100;i++){
System.out.print(name);
}
System.out.print(" 线程"+name+"结束 ");
}
private String name;
private Thread t;
}
构造方法摘要 Thread() 分配新的 Thread 对象。
Thread(Runnable target) 分配新的 Thread 对象。 Thread(Runnable target, String name) 分配新的 Thread 对象。
Thread(String name) 分配新的 Thread 对象。 Thread(ThreadGroup group, Runnable target) 分配新的 Thread 对象。
Thread(ThreadGroup group, Runnable target, String name) 分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,并作为 group 所引用的线程组的一员。 Thread(ThreadGroup group, Runnable target, String name, long stackSize) 分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈尺寸。
Thread(ThreadGroup group, String name) 分配新的 Thread 对象。 方法摘要 static int activeCount() 返回当前线程的线程组中活动线程的数目。
void checkAccess() 判定当前运行的线程是否有权修改该线程。 int countStackFrames() 已过时。
该调用的定义依赖于 suspend(),但它遭到了反对。此外,该调用的结果从来都不是意义明确的。
static Thread currentThread() 返回对当前正在执行的线程对象的引用。 void destroy() 已过时。
该方法最初用于破坏该线程,但不作任何清除。它所保持的任何监视器都会保持锁定状态。
不过,该方法决不会被实现。即使要实现,它也极有可能以 suspend() 方式被死锁。
如果目标线程被破坏时保持一个保护关键系统资源的锁,则任何线程在任何时候都无法再次访问该资源。如果另一个线程曾试图锁定该资源,则会出现死锁。
这类死锁通常会证明它们自己是“冻结”的进程。有关更多信息,请参阅为何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反对?。
static void dumpStack() 打印当前线程的堆栈跟踪。 static int enumerate(Thread[] tarray) 将当前线程的线程组及其子组中的每一个活动线程复制到指定的数组中。
static Map getAllStackTraces() 返回所有活动线程的堆栈跟踪的一个映射。 ClassLoader getContextClassLoader() 返回该线程的上下文 ClassLoader。
static Thread. () 返回线程由于未捕获到异常而突然终止时调用的默认处理程序。 long getId() 返回该线程的标识符。
String getName() 返回该线程的名称。 int getPriority() 返回线程的优先级。
StackTraceElement[] getStackTrace() 返回一个表示该线程堆栈转储的堆栈跟踪元素数组。 Thread.State getState() 返回该线程的状态。
ThreadGroup getThreadGroup() 返回该线程所属的线程组。 Thread. () 返回该线程由于未捕获到异常而突然终止时调用的处理程序。
static boolean holdsLock(Object obj) 当且仅当当前线程在指定的对象上保持监视器锁时,才返回 true。 void interrupt() 中断线程。
static boolean interrupted() 测试当前线程是否已经中断。 boolean isAlive() 测试线程是否处于活动状态。
boolean isDaemon() 测试该线程是否为守护线程。 boolean isInterrupted() 测试线程是否已经中断。
void join() 等待该线程终止。 void join(long millis) 等待该线程终止的时间最长为 millis 毫秒。
void join(long millis, int nanos) 等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。 void resume() 已过时。
该方法只与 suspend() 一起使用,但 suspend() 已经遭到反对,因为它具有死锁倾向。有关更多信息,请参阅为何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反对?。
void run() 如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。 void setContextClassLoader(ClassLoader cl) 设置该线程的上下文 ClassLoader。
void setDaemon(boolean on) 将该线程标记为守护线程或用户线程。 static void (Thread. eh) 设置当线程由于未捕获到异常而突然终止,并且没有为该线程定义其他处理程序时所调用的默认处理程序。
void setName(String name) 改变线程名称,使之与参数 name 相同。 void setPriority(int newPriority) 更改线程的优先级。
void (Thread. eh) 设置该线程由于未捕获到异常而突然终止时调用的处理程序。 static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。
static void sleep(long millis, int nanos) 在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行)。 void start() 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
void stop() 已过时。 该方法具有固有的不安全性。
用 Thread.stop 来终止线程将释放它已经锁定的所有监视器。
Runnable 接口就一个抽象的方法 run()
Thread类成员变量:
static int MAX_PRIORITY
static int MIN_PRIORITY
static int NORM_PRIORITY
成员方法:
void start()
void run()
void stop()
static void sleep(long millis)
void destroy()
void suspend()
看一下Thread类的源码,也许你就能搞清楚为身么文档里这样解释。
这是Thread类的run()方法的代码。一目了然如果target存在的话执行target的run()方法,否则什么也不做。这样我们可以推测(因为Thread 实际运行的方法start0 是native方法 我们看不到它的实现)也就是说Thread的run()方法总是先被调用的,然后调用taget(构造函数中的Runnable对象)的run()方法。
public void run() {
if (target != null) {
target.run();
}
}
如果对于target的来历还有疑问,可以看一下构造函数的实现:
public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(), 0);
}
还没完那。。。, init 的实现:
private void init(ThreadGroup g, Runnable target, String name,
long stackSize) {
//太多了,不贴了,总之target 就是那个Runnable了
}
说的不清楚么?总之Thread的start方法会调用自己的run方法,run方法会调用用于构造的Runnable对象的run方法。另一个编写自己的线程的方法就是extends Thread类并改写run方法。
在java5以前实现多线程有两种方法(继承Thread类和实现Runnable接口)
它们分别为:
使用new Thread()和new Thread(Runnable)形式
第一种直接调用thread的run方法,所以,往往使用Thread子类,即new SubThread()。
第二种调用
Runnable的run方法。
第一种:
new Thread(){}.start();这表示调用Thread子类对象的run方法,new Thread(){}表示一个Thread的匿名子类的实例对象,子类加上run方法后的代码如下:
new Thread(){
public void run(){
}
}.start();
第二种:
new Thread(
new Runnable(){}
).start();
这表示调用Thread对象接受的Runnable对象的run方法,new Runnable(){}表示一个Runnable的匿名子类的实例对象,
runnable的子类加上run方法后的代码如下:
new Thread(new Runnable(){
public void run(){
}
}
).start();
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:2.603秒