Runnable和Thread

静态代理在Java中常用于线程管理,Thread作为Runnable的实现,负责将任务加入等待队列。Runnable接口允许多继承,适合资源共享,而直接使用Thread开启线程不涉及资源共享。线程池只接受Runnable或Callable任务,强调了Runnable在多线程编程中的重要性。两种创建线程的方式,一种通过共享Runnable实例实现资源共享,另一种则分别启动两个独立的Thread对象,无法共享资源。

静态代理问题

Thread相当于是对线程的静态代理,为线程添加了许多便于管理的额外功能。

run()

Runnable是一个接口,包含 run()方法,该方法会将线程直接运行而不会加入等待队列。

start()

Thread是Runnable的实现类,调用其start方法会将方法加入等待队列等待CPU调度。
Runnable其实相对于一个Task,并不具有线程的概念,如果直接去调用Runnable的run,其实就是相当于直接在主线程中执行了一个函数而已,并未开启线程去执行。

资源共享问题

Thread “不适合” 做资源共享,但是也可以实现。(当以Thread方式去实现资源共享时,实际上源码内部是将thread向下转型为了Runnable,实际上内部依然是以Runnable形式去实现的资源共享。)
Runnable和Thread相比优点有:
(1)由于Java不允许多继承,因此实现了Runnable接口可以再继承其他类,但是Thread明显不可以
(2)Runnable可以实现多个相同的程序代码的线程去共享同一个资源,而Thread并不是不可以,而是相比于Runnable来说,不太适合。
(3)线程池只能放入实现Runable或callable类线程,不能直接放入继承Thread的类

MyThread t1 = new MyThread();
new Thread(t1, "线程1").start();
new Thread(t1, "线程2").start();
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
t1.start();
t2.start();

Thread的Thread方法
第一种方法实际是对同一个runnable对象的操作,实现了资源共享,第二种方法是对两个Thread对象的操作,故无法实现资源共享。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值