1 package multithread2;
2
3 /*
4 * 创建线程的第一种方法:继承Thread类
5 *
6 * 创建线程的第二种方式:实现Runnable接口
7 *
8 * 1,定义类实现Runnable接口。
9 * 2,覆盖接口中的run方法,将线程的任务代码封装到run方法中。
10 * 3,通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数的参数进行传递。
11 * 为什么?因为线程的任务都封装在Runnable接口子类对象的run方法中。
12 * 所以要在线程对象创建时就必须明确要运行的任务。
13 * 4,调用线程对象的start方法开启线程
14 *
15 *
16 * Runnable出现仅仅是将线程的任务进行对象的封装
17 *
18 * 实现Runnable接口的好处:
19 * 1,将线程的任务从线程的子类中分离出来,进行了单独的封装。
20 * 按照面向对象的思想将任务的封装成对象。
21 * 2,避免了java单继承的局限性。
22 *
23 * 所以,创建线程的第二种方式较为常用
24 *
25 */
26
27
28 class Demo implements Runnable {//extends Fu {//如果自己本身有父类怎么解决实现run方法呢?准备扩展Demo类的功能,让其中的内容可以作为线程的任务
29 //通过接口的形式完成
30
31 public void run() {
32 show();
33 }
34 public void show() {
35 for (int x = 0; x < 20; x++) {
36 System.out.println(Thread.currentThread().getName()+"...."+x);
37 }
38 }
39 }
40 public class ThreadDemo {
41
42 public static void main(String[] args) {
43 // TODO Auto-generated method stub
44 Demo d = new Demo();
45 Thread t1 = new Thread(d);
46 Thread t2 = new Thread(d);
47 t1.start();
48 t2.start();
49 // Demo d1 = new Demo();
50 // Demo d2 = new Demo();
51 // d1.start();
52 // d2.start();
53 }
54
55 }
56
57
58 class Thread{
59 private Runnable r;
60 Thread(){
61
62 }
63 Thread(Runnable r){
64 this.r = r;
65 }
66 public void run() {
67 if (r!=null) {
68 r.run();
69 }
70
71 }
72 public void start() {
73 run();
74 }
75 }
76
77
78 class ThreadImpl implements Runnable{
79 public void run() {
80 System.out.println("runnable run");
81 }
82
83 }
84 ThreadImpl i = new ThreadImpl();
85 Thread t = new Thread(i);
86 t.start();
87
88 /*
89 class SubThread extends Thread{
90 public void run() {
91 System.out.println("haha");
92 }
93 }
94 SubThread s = new SubThread();
95 s.start();
96 */

ThreadDemo

多线程-创建线程第二种方式-实现Runnable接口-细节和好处的更多相关文章

  1. Thread类的常用方法_sleep和创建多线程程序的第二种方式实现Runnable接口

    public static void sleep(long millis);//使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行). 毫秒数结束后线程继续执行 package com.yang.T ...

  2. 创建线程的第二种方式------实现Runnable接口的方式

    package cn.itcast.demo16.Demo07.Runnable;/** * @author newcityman * @date 2019/7/22 - 23:17 */public ...

  3. java多线程 -- 创建线程的第三者方式 实现Callable接口

    Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个 ...

  4. Thread类的常用方法_sleep和创建多线程程序的第二种方式_实现Runnable接口

    sleep方法是在Thread类中的一个静态方法,当一个线程调用了sleep方法,被调用的那个线程就会暂时的让出指定时间的CPU执行权,在这段时间也不会参与CPU的调度,当时间到了之后,就会重新回到就 ...

  5. java基础知识回顾之java Thread类--java线程实现常见的两种方式实现Runnable接口(二)

    创建线程的第二中方式: /** *      步骤: 1定义类实现Runnable接口      2.实现Runnable接口中的run方法.      3.通过Thread类建立线程对象,并将Run ...

  6. 50、多线程创建的三种方式之实现Runnable接口

    实现Runnable接口创建线程 使用Runnable创建线程步骤: package com.sutaoyu.Thread; //1.自定义一个类实现java.lang包下的Runnable接口 cl ...

  7. 如何创建线程第二种实现Runnable接口

    package TestException; public class test5 { public static void main(String[] args) { Test6 s1 = new ...

  8. 51、多线程创建的三种方式之实现Callable接口

    实现Callable接口创建线程 Callable接口是在jdk5版本中加入的,这个接口在java.util.concurrent包下面,与其他两种方式不同的地方在于使用Callable接口创建的线程 ...

  9. Java创建线程四种方式

    1.继承Thread类 public class MyThread extends Thread { public MyThread() { } public void run() { for(int ...

随机推荐

  1. java类型转换拓展

    数据类型拓展 在Java中二进制用0b开头,八进制用0开头,十六进制用0x表示 整数拓展  int i=10; int i2=010;//八进制 int i3=0x10;//十六进制0x,0-9,A- ...

  2. 【LeetCode】868. Binary Gap 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 线性扫描 日期 题目地址:https://leetc ...

  3. 【LeetCode】709. To Lower Case 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述: 题目大意 解题方法 ASIIC码操作 日期 题目地址:https:// ...

  4. D. Persistent Bookcase(Codeforces Round #368 (Div. 2))

    D. Persistent Bookcase time limit per test 2 seconds memory limit per test 512 megabytes input stand ...

  5. Problem 2233 ~APTX4869

    Problem 2233 ~APTX4869 Accept: 55    Submit: 176Time Limit: 1000 mSec    Memory Limit : 32768 KB Pro ...

  6. 【死磕Java并发】-----Java内存模型之重排序

    在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件: 在单线程环境下不能改变程序运行的结果: 存在数据依赖关系的不 ...

  7. 小程序中使用、H5、uniapp下使用阿里巴巴iconfront图标或者新增图标

    第一步:登录iconfont的账号,创建项目. 第二步:选择自己需要的图标,并添加入库(就是那个购物车的图标). 第三步:将选好的图片添加到项目.(点击上图中右上角的购物车图标). 第四步:下载资源到 ...

  8. Blazor组件的new使用方式与动态弹窗

    1. 前言 在Blazor中的无状态组件文中,我提到了无状态组件中,有人提到这个没有diff,在渲染复杂model时,性能可能会更差.确实,这一点确实是会存在的.以上文的方式来实现无状态组件,确实只要 ...

  9. 面试中问你MySql,这一篇就够了

    说一说主键索引与唯一索引 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的. 主键索引默认是聚簇索引.唯一索引一般是非聚簇索引. 主键索引不能为空,唯一索引在InnoDB中可以出现多个null ...

  10. iNeuOS工业互联网操作系统,增加DTU与平台实时交互的应用场景

    目       录 1.      概述... 2 2.      平台演示... 2 3.      硬件设置... 2 4.      应用过程... 3 1.   概述 DTU向下连接硬件传感器 ...