一:使用Theard的公共静态方法直接生成并控制,如下:
二:工程中最常用的方法,接口Runnable,如下:
public class currentThread{ public static void main(String args[]){ Threadthread = Thread.currentThread(); System.out.println("线程名称是:"+thread.getName()); System.out.println("线程的优先级是:"+thread.getPriority()); thread.setName("thread one"); System.out.println("线程现在的名字是:" +thread.getName()); thread.setPriority(1); System.out.println("线程现在的优先级是:" +thread.getPriority()); try{ for (int i =0; i < 5; i++) { System.out.println(i); thread.sleep(1000); } } catch(Exception e) { // TODO:handle exception } }}
二:工程中最常用的方法,接口Runnable,如下:
public class newThreadimplements Runnable{//使用Runnable定义的子类中没有start()方法,只有Thread类中才有。此时观察Thread类,有一个构造方法:publicThread(Runnable targer)//此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。start()可以协调系统的资源; // newThread(){// Threadthread = new Thread(this,"t_1");//直接重新命名// System.out.println(thread);// thread.start();// } newThread(String name){ }; //在正式方法中直接用newThread mt1=new newThread("线程1")就可以了 static newThread mt1=new newThread("线程1"); @Override public void run() { // TODOAuto-generated method stub } public static void main(String args[]){ //newnewThread(); newThread(mt1).start(); try{ for (int i =0; i < 10; i++) { System.out.println(i); Thread.sleep(1000); } } catch(Exception e) { // TODO:handle exception } }}三:Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限,下面看例子:
class MyThread extends Thread{ privateString name; publicMyThread(String name) { super(); this.name = name; } public voidrun(){ for(int i=0;i<10;i++){ System.out.println("线程开始:"+this.name+",i="+i); } }}package org.thread.demo; public classThreadDemo01 { public static void main(String[] args) { MyThread mt1=new MyThread("线程a"); MyThread mt2=new MyThread("线程b"); mt1.run(); mt2.run(); }}但是,此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。在JDK的文档中可以发现,一旦调用start()方法,则会通过JVM找到run()方法。下面启动 start()方法启动线程:
package org.thread.demo;public class ThreadDemo01 { publicstatic void main(String[] args) { MyThread mt1=new MyThread("线程a"); MyThread mt2=new MyThread("线程b"); mt1.start(); mt2.start(); }};这样程序可以正常完成交互式运行。那么为啥非要使用start();方法启动多线程呢? 在JDK的安装路径下,src.zip是全部的java源程序,通过此代码找到Thread中的start()方法的定义,可以发现此方法中使用了private native voidstart0();其中native关键字表示可以调用操作系统的底层函数,那么这样的技术成为JNI技术(java NativeInterface)