1)继承Thread,重写其的run方法2)实现Runnable接口代码如下:
- package com.study;
- /**
- *
- * @ClassName: ThreadTest
- * @Description: 创建线程的两种方式
- * @author 我夕
- */
- public class ThreadTest {
-
- public static void main(String[] args) {
-
- System.out.println("当前线程的名字:"+Thread.currentThread().getName()+";线程ID:"+Thread.currentThread().getId());
-
- ThreadOne one=new ThreadOne();
- one.setName("ThreadOne");//为了便于调试,建议创建时给线程设个名称
- one.start();
-
- Thread two2=new Thread(new ThreadTwo());
- two2.setName("ThreadTwo");
- two2.start();
-
- }
-
- //继承Thread,覆盖父类run方法
- public static class ThreadOne extends Thread{
- @Override
- public void run() {
- // TODO Auto-generated method stub
- super.run();
- //do xx
- System.out.println("当前线程的名字:"+Thread.currentThread().getName()+";线程ID:"+Thread.currentThread().getId());
- }
- }
-
-
- //实现Runnable接口
- public static class ThreadTwo implements Runnable{
-
- @Override
- public void run() {
- // TODO Auto-generated method stub
- //do xx
- System.out.println("当前线程的名字:"+Thread.currentThread().getName()+";线程ID:"+Thread.currentThread().getId());
- }
-
- }
- }
总结:创建线程的传统方式就上面两种(这里不考虑jdk1.5种线程并发库里的创建方式,后续会写到),但写的方式却是多种多样,希望初学者不要被其搞混掉两种方式都可以创建线程,第一种方式创建比较简单,但由于java是单继承的缘故,创建出的Thread子类就无法在继承其他类;实现Runnable接口的方式可以将cpu、代码和数据分开,同时创建出的线程可以共享处理同一份资源。记住:Thread类本身也实现了Runnable接口,因此Thread类及其子类的对象也可以作为target传递给新的线程对象。