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. Linux执行脚本报错:-bash: ./xx.sh: /bin/bash^M: bad interpreter: No such file or directory

    1.用vim打开文本 输入 : set ff 这里要先按":"号 显示文件为dos格式 2.强制装换格式为unix 先按冒号":" set ff=unix 然后 ...

  2. SpringBoot 上传文件功能

    注意事项: springboot默认有以下文件配置要求, 可以自行在配置文件里面修改 spring: servlet: multipart: enabled: true #是否处理上传 max-fil ...

  3. 【LeetCode】1064. Fixed Point 解题报告(C++)

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

  4. Rainbond通过插件整合ELK/EFK,实现日志收集

    前言 ELK 是三个开源项目的首字母缩写:Elasticsearch.Logstash 和 Kibana.但后来出现的 FileBeat 可以完全替代 Logstash的数据收集功能,也比较轻量级.本 ...

  5. Python基础入门(8)- Python模块和包

    1.包与模块的定义与导入 1.1.什么是python的包与模块 包就是文件夹,包中还可以有包,也就是子文件夹 一个个python文件模块 1.2.包的身份证 __init__.py是每一个python ...

  6. <学习opencv>绘画和注释

    /*=========================================================================*/ // 绘画 和 注释 /*========= ...

  7. C#中ref关键字的用法总结

    ref表示引用的意思,C#中它有多种用法,这里简单总结一下: 1.按引用传递参数 具体可见:C#中的值传递与引用传递(in.out.ref) 2.引用局部变量 引用局部变量指的是在变量声明时使用ref ...

  8. JS常见框架汇总

    基础框架 Vue.js 官网地址 : http://cn.vuejs.org/ 官方简介 : Vue.js 是一套用于构建用户界面的渐进式框架. 框架类型 : 前端项目级框架 适用平台 : 通用 仓库 ...

  9. [Blue Prism] Data item 的使用

      1.用于存储各种数据类型的变量,支持的数据类型如下: Binary - 用于存储二进制 blob,例如文本文件. Date - 用于存储日期. 此数据类型与 DateTime 类似,只是 Date ...

  10. nginxWebUI

    nginx网页配置工具 github: https://github.com/cym1102/nginxWebUI 功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, ...