作者 : 卿笃军

原文地址:http://blog.csdn.net/qingdujun/article/details/39347245

本文演示,Tread多线程实现Runnable接口,以及简单的说明为什么有这样的创建线程的方法。

一、创建线程的2中方法:

1)继承Thread类实现多线程,參见我的上一篇文章:Java Tread多线程(0)一个简单的多线程实例 ;

2)另外一种方法就是实现Runnable接口,创建一个新线程。

二、为什么要有这两种方法创建线程呢?

①主要原因:就是方法1)不能满足我们的需求了,所以才产生了方法2);

②不能满足要求的原因:主要是Java里面仅仅能有单继承,假设一个类Student必须从Person类继承过来。可是Student里面的某些内容我们又要实现多线程,这不就矛盾了?(由于方法1要实现多线程就必须从Thread继承。)。所以这里就引入了Runnable方法:实现Runnable接口,以达到多线程的效果,建议平时都用另外一种方法。也就是本文的方法。

三、一个小Demo

package thread.runable1.qdj;
//1.定义类实现Runnable接口
class RunDemo1 implements Runnable
{
private int x = 0;
//2.覆盖Runnable接口中的run方法
//将线程代码存放在run中
public void run()
{
while (x <= 100)
System.out.println("Runnable:"+(x++));
}
}
public class CRunableDemo1 { public static void main(String[] args) {
RunDemo1 r = new RunDemo1();
//3.通过Thread类建立线程对象,并将Runnable接口的子类对象作为參数
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
//4.使用start开启线程
t1.start();
t2.start();
}
}

执行结果显示:(这里打印出了0-10。注意:没有反复的)

通过上面的执行结果,我们试比較一下例如以下代码(将x定义为局部变量):

package thread.runable1.qdj;
//1.定义类实现Runnable接口
class RunDemo1 implements Runnable
{
//private int x = 0;
//2.覆盖Runnable接口中的run方法
//将线程代码存放在run中
public void run()
{
for (int x = 0; x <= 3; ++x)
System.out.println("Runnable:"+x);
}
}
public class CRunableDemo1 { public static void main(String[] args) {
RunDemo1 r = new RunDemo1();
//3.通过Thread类建立线程对象。并将Runnable接口的子类对象作为參数
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
//4.使用start开启线程
t1.start();
t2.start();
}
}

执行结果显示(这里打印了2次发现没有?):

比較着两种情况。事实上也就说明了一个问题:

结论:局部变量在每一个线程里面都有一份。

參考文献: Java视频 毕向东 主讲

原文地址:http://blog.csdn.net/qingdujun/article/details/39347245

Java Tread多线程(1)实现Runnable接口的更多相关文章

  1. Java之多线程(实现Runnable接口)

    package test_demo.ThreadsDemo; public class TestRunnable { public static void main(String[] args) { ...

  2. “全栈2019”Java多线程第三章:创建多线程之实现Runnable接口

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  3. 多线程之实现Runnable接口及其优点

    多线程之实现Runnable接口: 1.创建一个Runnable接口的实现类 2.在实现类中重写Runnable接口的run方法 3.创建一个Runnable接口实现类的对象 4.创建Thread类对 ...

  4. Java多线程之实现Runnable接口

    package org.study2.javabase.ThreadsDemo.runnable; /** * @Auther:GongXingRui * @Date:2018/9/18 * @Des ...

  5. (CSDN迁移) JAVA多线程实现-实现Runnable接口

    实现Runnable接口  implements Runnable 重写run()方法 @Override public void run(){//TODO} 创建线程对象: Thread threa ...

  6. Java Tread多线程(2)多线程安全问题

    作者 :卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39348093 本文演示,Tread多线程安全问题,以及几种解决多线程安全方式 ...

  7. 多线程(实现Runnable接口)

    /** * 创建一个子线程, 完成1-100之间自然数的输出,同样的主线程执行同样的操作 *创建多线程的第二种方式,通过实现的方式 * 继承和实现的方式对比 * 一,联系: *  public cla ...

  8. Java基础之线程——使用Runnable接口(JumbleNames)

    控制台程序. 除了定义Thread新的子类外,还可以在类中实现Runnable接口.您会发现这比从Thread类派生子类更方便,因为在实现Runnable接口时可以从不是Thread的类派生子类,并且 ...

  9. Java之同步方法处理实现Runnable接口的线程安全问题

    /** * 使用同步方法解决实现Runnable接口的线程安全问题 * * * 关于同步方法的总结: * 1. 同步方法仍然涉及到同步监视器,只是不需要我们显式的声明. * 2. 非静态的同步方法,同 ...

随机推荐

  1. django之cookie、session和ajax

    1 Cookie cookie是什么? 保存在客户端浏览器上的键值对   {k:v} cookie依附在请求头或响应头中出现 发送请求时,会自动携带自己网站的cookie 应用: 实现登录 投票 1. ...

  2. hdu 3586 树形dp+二分

    题目大意:给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵 树,每条边都有一个权值cost表示破坏这条边的费用,叶子节点为前线.现要切断前线和司令部的联系,每次切断边的费用不能超过上限lim ...

  3. 温故而知新---Java(一)

    学习不仅要学习新的东西,而且还要时不时的回过头捡漏... 本文参考老马说编程系列等文,在此推荐大家关注老马说编程系列文章 正文 基础知识 数据类型主要是为了对数据进行分类,方便理解和操作,在Java中 ...

  4. MariaDB 10 (MySQL DB) 多主复制并实现读写分离

    ----本文大纲 简介 资源配置 拓扑图 实现过程 ==================== 一.简介 MMM 即Master-Master Replication Manager for MySQL ...

  5. (转)Ext.Button点击事件的三种写法

    转自:http://maidini.blog.163.com/blog/static/377627042008111061844345/ ExtJs的写法太灵活了,现在收集了关于Button点击事件的 ...

  6. Autocomplete TEdit

    http://forum.codecall.net/topic/75946-autocomplete-tedit/ Overview Autocomplete feature really helpf ...

  7. Wifi模块的工作原理

    http://www.wifitop1.com/news/content-98.html 在无线网络领域里面,无线wifi是最火的名词.对于串口wifi模块的工作是什么呢?串口wifi模块又有什么功能 ...

  8. WICED -- Wireless Internet Connectivity for Embedded Devices

    Broadcom's Wireless Internet Connectivity for Embedded Devices (WICED™) platform (pronounced "w ...

  9. linux查看端口被哪个服务占用的命令

    netstat -tunpl | grep 6379

  10. CSS换行:word-wrap、word-break和text-wrap差别

    一.word-wrap:同意对长的不可切割的单词进行切割并换行到下一行.(中英文处理效果一样) word-wrap有两个取值: 1.word-wrap: normal:仅仅在同意的断字点换行(浏览器保 ...