传智播客Java线程

关于线程的介绍有如下内容: 
   01. 传统线程技术回顾
    02. 传统定时器技术回顾
    03. 传统线程互斥技术
    04. 传统线程同步通信技术
    05. 线程范围内共享变量的概念与作用
    06. ThreadLocal类及应用技巧
    07. 多个线程之间共享数据的方式探讨
    08. java5原子性操作类的应用
    09. java5线程并发库的应用
    10. Callable与Future的应用
    11. java5的线程锁技术
    12. java5读写锁技术的妙用
    13. java5条件阻塞Condition的应用
    14. java5的Semaphere同步工具
    15. java5的CyclicBarrier同步工具
    16. java5的CountDownLatch同步工具
    17. java5的Exchanger同步工具
    18. java5阻塞队列的应用
    19. java5同步集合类的应用
         Java线程是一项非常基本和重要的技术,在偏底层和偏技术的Java程序中不可避免地要使用到Java线程技术,特别是android手机程序和游戏开发中,多线程成了必不可少的一项重要技术。但是,很多Java程序员对Java线程技术的了解都仅停留在初级阶段,在项目中一旦涉及到多线程时往往就表现得糟糕至极,所以,软件公司常常使用Java线程技术来考察面试者的基本功和判断其编码水平的高低。

一   现在我们来回顾一下,传统的线程创建方式:

1:这种方式使用继承Thread类的方式,也就是使用Thread子类的形式:
		Thread t1 = new Thread() {
			@Override
			public void run() {
				while (true) {
					System.out.println(Thread.currentThread().getName());
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}

				}
			}
		};
		t1.start();
2 :使用实现Runnable接口的方式创建线程:

		Thread t2 = new Thread(new Runnable() {
			public void run() {
				while (true) {
					System.out.println(Thread.currentThread().getName());
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}

			}

		}) {
		};
		t2.start();
接触过线程的都知道这两种创建线程的方式, 接下来我们看一下另一种方式运行结果是怎么样的:
		new Thread(new Runnable() {
			public void run() {
				while (true) {
					System.out.println("runnable:"+Thread.currentThread().getName());
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}) {
			@Override
			public void run() {
				while (true) {
					System.out.println("thread:"+Thread.currentThread().getName());
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}.start();
这种方式是上面两种方式的结合体,写成简单的方式就是:
new Thread(new Runnable(){}){run()}
那么它到底会运行Runnable子类的run方法还是Thread子类的run()方法呢?
我们看一下Thread的源代码:
    public void run() {
	if (target != null) {
	    target.run();
	}
    }
也就是说,如果我们没有覆盖Thread的run()时,实现了Runnable接口,那么就执行Runnable接口的run()方法,然而在上面的例子,我们已经覆盖 了Thread类的run()方法,
根据多态,所以执行的是Thread子类的run()方法.












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值