Java多线程中Thread与Runnable详解
在初学多线程部分知识时,Thread类与Runnable类是最经常接触到的两个经典类;可追溯至JDK1.0版本,古老的类传说。
剧情开始啦,神秘的鲜橙多国度,卖橙子喽(实现数据共享,产生若干线程进行同一数据的处理操作)
主角登场:斯先生(Thread),人称”鲜橙F4“之首;
R小姐姐(Runnable),人称“仙女姐姐”;
坊间议论道:斯先生那可是鲜橙国出了名的美男子;R姐姐也是咱们鲜橙庄园四千年来的美女呢;
Action:买橙子1场景开始
斯先生走来,身后跟着三个小老弟,拿着三个环保袋,直奔鲜橙庄园;
class MyThread01 extends Thread{
private int orange = 10;
private String name;
public MyThread01(String name){
this.name = name;
}
@Override
public void run() {
while(orange > 0){
System.out.println(this.name+"买走了一个橙子,"+"还剩下"+--orange+"个橙子;");
}
}
}
public class ThreadTest01 {
public static void main(String[] args) {
Thread thread1 = new MyThread01("斯泽类");
Thread thread2 = new MyThread01("斯西门");
Thread thread3 = new MyThread01("斯美作");
thread1.start();
thread2.start();
thread3.start();
}
}
R姐姐翩翩来,步履轻盈,缓缓走向庄园内;
class MyThread2 implements Runnable{
private int orange = 10;
private String name;
public MyThread2(String name) {
this.name = name;
}
@Override
public void run() {
while (orange > 0){
System.out.println(this.name+"挑走了一个橙子,还剩下"+--orange+"个橙子啦");
}
}
}
public class ThreadTest02 {
public static void main(String[] args) {
MyThread2 thread1 = new MyThread2("R姐姐");
new Thread(thread1).start();
new Thread(thread1).start();
new Thread(thread1).start();
}
}
可以从结果看出,鲜橙F4的环保袋(Thread)里一共装了30个大橙子,仙女姐姐(Runnable)挑走了10个橙子;
结论:使用Runnable实现的多线程的程序类可以更好的描述出程序共享的概念(并不是说thread不可以)
Thread类是多线程的关键类,多线程的启动永远都是Thread类的start()方法
这张图也是创建多线程的两种方式;
其中,需要注意的就是传入Runnable对象的那个,这里设计到典型设计模式中的代理设计模式;
Java中多线程的处理就是典型的代理模式,
Thread类完成资源调度,系统分配辅助线程业务类;自定义线程类(MyThread)负责真实业务实现;
Thread与Runnable实现多线程的联系与区别:
(1)Runnable可避免Thread单继承局限;
(2)Runnable可以更好的描述出程序共享的概念;
最后,
欢迎私聊及留言呐
上一篇: Python中关于序列操作的实例代码分享
推荐阅读
-
java 并发中的原子性与可视性实例详解
-
Python中多线程thread与threading的实现方法
-
详解java中面向对象设计模式类与类的关系
-
对python多线程中Lock()与RLock()锁详解
-
Android开发笔记之:Handler Runnable与Thread的区别详解
-
详解Java中log4j.properties配置与加载应用
-
对python 多线程中的守护线程与join的用法详解
-
Java中实现多线程继承Thread类与实现Runnable接口的区别
-
Linux CentOS 7.0中java安装与配置环境变量的步骤详解
-
Java中Thread的Interrupt与终止线程