线程的创建与启动
2011-05-04 15:31
232 查看
线程的创建与启动
可通过两种方法来定义线程
一、定义线程
1.扩展java.lang.Thread
public void run();
如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
Thread 的子类应该重写该方法。
2.实现java.lang.Runnable
void run();
使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的 run 方法。
二、实例化线程
1.如果是Thread的扩展,直接new即可。
2.如果是实现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()方法将运行。
注意:在Runnable或者Thread类内部调用run方法并不启动新的线程。
四、案例
可通过两种方法来定义线程
一、定义线程
1.扩展java.lang.Thread
public void run();
如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
Thread 的子类应该重写该方法。
2.实现java.lang.Runnable
void run();
使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的 run 方法。
二、实例化线程
1.如果是Thread的扩展,直接new即可。
2.如果是实现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()方法将运行。
注意:在Runnable或者Thread类内部调用run方法并不启动新的线程。
四、案例
/* * 扩展Thread */ package threadtest; public class ThreadTest extends Thread { private String threadName; private int threadCount; ThreadTest(String threadName){ this.threadName = threadName; this.threadCount = 0; } /** * @param args the command line arguments */ public static void main(String[] args) { Thread t1 = new ThreadTest("#1"); Thread t2 = new ThreadTest("#2"); t1.start(); t2.start(); } public void run(){ for(int i=0;i<5;i++){ try{ Thread.sleep(500); }catch(InterruptedException e){ System.out.println(threadName+":中止"); } System.out.println(threadName+":"+i); threadCount++; } } } /* * 实现Runnable接口 */ package threadtest; import java.util.logging.Level; import java.util.logging.Logger; public class RunnableTest implements Runnable { private String ThreadName; public RunnableTest(String ThreadName){ this.ThreadName = ThreadName; } public void run() { System.out.println(ThreadName+":线程开始"); for(int i=1; i<5 ; i++){ try { Thread.sleep(100); } catch (InterruptedException ex) { Logger.getLogger(RunnableTest.class.getName()).log(Level.SEVERE, null, ex); } System.out.println(ThreadName+":"+i); } System.out.println(ThreadName+":线程结束"); } } /* * 调用RunnableTest */ package threadtest; import java.util.logging.Level; import java.util.logging.Logger; public class TestRunnable { public static void main(String[] args){ RunnableTest r1 = new RunnableTest("#1"); RunnableTest r2 = new RunnableTest("#2"); Thread t1 = new Thread(r1); Thread t2 = new Thread(r2); t1.start(); t2.start(); } }
相关文章推荐
- 多线程1(线程的创建和启动)
- 创建和启动java线程
- Java核心内库-线程-通过继承Thread类创建并启动线程
- Java线程的创建与启动(1)
- 线程的创建和启动
- Java并发1——线程创建、启动、生命周期与线程控制
- java线程(一)创建和启动线程
- 如何定义,创建,启动一个线程
- 线程创建和启动:继承Thread类和实现Runnable接口
- Java并发编程之线程创建和启动(Thread、Runnable、Callable和Future)
- Java线程:创建与启动
- java多线程2(线程的创建方式以及启动)
- Java线程的创建和启动
- 线程——创建和启动
- Java线程:创建与启动
- Java线程的创建和启动
- 线程的创建和启动
- 多线程(2)线程的创建和启动
- Java基础-多线程-①线程的创建和启动
- java多线程之创建和启动线程