多线程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());

 这行代码.

 

 

posted @ 2014-06-05 17:36  廖凯林  阅读(342)  评论(0编辑  收藏  举报