多线程01-线程基础

线程的两种实现方式 

      继承Thread类

Thread thread = new Thread(){

			@Override

			public 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();

       实现Runnable接口

	Thread thread2 = new Thread(new Runnable(){

			@Override

			public void run() {

				while(true){

					try {

						Thread.sleep(500);

					} catch (InterruptedException e) {

						e.printStackTrace();

					}

					System.out.println("1:" + Thread.currentThread().getName());



				}				

				

			}

		});

		thread2.start();

  

要注意的是: 实现Runnable接口类实质上不是一个线程实现类 ,是在new Thead(实现Runnable接口类).start() 的时候才真正的调用线程类 Runnable接口只是覆盖了run()方法的实现.

 

例子

 

		new Thread(

				new Runnable(){

					public 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();

		

  

   上面的例子最终允许的是哪个run方法呢?

  分析:new Runnable(){} 是Runnable接口的匿名内部类,  new Thread( new Runnable(){}) 实质上是创建了一个Thead的类对象  ,  new Thread( new Runnable(){}) {}则为Thead的一个

匿名内部类,覆写了run方法  那么最终调用的肯定是匿名内部类中的run方法   即: 执行

System.out.println("thread :" + Thread.currentThread().getName());

 这行代码.

 

 

你可能感兴趣的:(多线程)