创建新线程的第二种方法
-
定义一个实现了Runnable接口的类,假定为A
-
创建A类对象aa,代码如下:
A aa = new A();
-
利用aa构造一个Thread对象tt
Thread tt = new Thread(aa);
-
调用tt中的start()方法
tt.start();//自动调用的是aa里面的run()方法
package bitter.xc.day.pkg1; class A implements Runnable{ public void run(){ while(true){ System.out.printf("AAAA!\n"); } } } public class BitterXcDay1 { public static void main(String[] args) { A aa = new A(); //aa.run(); //aa.start();error Thread t = new Thread(aa);//public Thread(Runnable r); t.start(); while(true){ System.out.printf("BBBB\n"); } } }
线程常用方法的介绍
public final void setName(String name) //设置当前线程的名字 public static Thread currentThread() //返回对当前正在执行的线程对象的使用 public final String getName() //返回当前线程的名字
线程优先级
-
线程的优先级用数字来表示,范围是1-10
-
主线程的缺省优先级是5,子线程的优先级默认与父线程相同
时间片轮转CPU通常执行30s
无论继承Thread类的run方法还是实现Runnable接口的run方法,都不能抛出任何异常
package bitter.xc.day.pkg1; class A extends Thread{ public void run(){ System.out.printf("%s在执行!",Thread.currentThread().getName()); // System.out.printf("AAAA!\n"); } } public class BitterXcDay1 { public static void main(String[] args) { A aa1 = new A(); aa1.setName("张山"); A aa2 = new A(); aa2.setName("招儿"); A aa3 = new A(); aa3.setName("王五"); //aa.run(); //aa.start();error // Thread t = new Thread(aa);//public Thread(Runnable r); aa1.start(); aa2.start(); aa3.start(); // System.out.printf("BBBB\n"); System.out.printf("%s在执行!",Thread.currentThread().getName()); } }
run: 张山在执行!王五在执行!招儿在执行!BBBB main在执行!成功构建 (总时间: 0 秒)