java多线程之创建线程的两种传统方式

来源:互联网 发布:巨人网络借壳上市分析 编辑:程序博客网 时间:2024/05/17 05:16
package javaplay.thread.test;public class TraditionalThread {public static void main(String[] args) {// 第一种Thread thread = new Thread() {@Overridepublic void run() {while (true) {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("1:" + Thread.currentThread().getName());System.out.println("2:" + this.getName());// 不建议这么做,第二种方式就不能用这种}}};thread.start();// 第二种 更加体现面向对象的思维 把运行代码封装到一个对象中Thread thread2 = new Thread(new Runnable() {@Overridepublic void run() {while (true) {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("1:" + Thread.currentThread().getName());}}});thread2.start();// new Thread(runnable.run){run}.start();// 运行start方法就会去找当前对象身上的run方法,如果没找到自己的run方法就用自己父类的run方法// 父类的run方法会去找runnable,此例的匿名子类覆盖了父类的run方法没有去找runnable,之所以会找runnable// 是因为父类的run方法会去找runnable,只要不覆盖父类的run方法,就会去找runnable,如果覆盖了,就以覆盖的代码为准new Thread(new Runnable() {@Overridepublic void run() {while (true) {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("runnable:" + Thread.currentThread().getName());}}}) {public void run() {while (true) {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("thread:" + Thread.currentThread().getName());}}}.start();// 创建线程的两种传统方式,总结:查看Thread类的run方法的源代码,// 可以看到其实这两种方式都是在调用Thread对象的run方法,如果Thread类的run方法// 没有被覆盖,并且为该Thread对象设置了一个Runnable对象,该run方法会调用Runnable对象的run方法// 多线程下载:去抢了服务器的带宽,服务器可以同时为100个线程提供服务,为每个线程提供20k,一个线程只能是20k}}

0 0