------------------------------------------------------------------------------------------------------------    

   

  /**  第一种方式:继承Thread类

     *             1. 定义一个类,然后让该类继承Thread类

     *             2. 重写run方法

     *             3. 创建定义的这个类的对象

     *             4. 启动线程

     */

  //继承Thread类

   public class MyThread extends Thread{

     public MyThread() {}

     public MyThread(String name) {
super(name);
} //run方法中封装的应该是要被线程执行的代码 ,run方法中代码的原则,一般存方的都是比较耗时的代码
public void run (){ for (int i = 0; i < 200; i++) { System.out.println(Thread.currentThread().getName() + "---" + i);
}
}
}   //测试方法   private static void Test() {    // 创建对象
MyThread mt1 = new MyThread();
MyThread mt2 = new MyThread(); //启动线程
// public void start()使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
mt1.start();
//mt1.start();// 线程的启动只能是一次
mt2.start();   }

------------------------------------------------------------------------------------------------------------

  /**  第二种方式:实现Runnable接口
     避免了单线程带来的困扰
     *    (1): 创建一个类,让该类实现Runnable接口      *    (2): 重写run方法      *    (3): 创建该类的对象      *    (4): 创建Thread类的对象,然后把3中的对象作为参数传递给Thread      *    (5): 启动线程      */   //实现Runnable接口   public class MyThread2 implements Runnable {  public MyThread2() {
super();
} public void run() { for(int x = 0 ; x < 200 ; x++){ System.out.println(Thread.currentThread().getName() + "---" + x);
}
}
}   //测试方法 private static void Test2() {     // 创建MyThread的对象
MyThread2 mt = new MyThread2();
// 创建Thread类的对象,然后把3中的对象作为参数传递给Thread
// public Thread(Runnable target)
Thread t1 = new Thread(mt,"张飞");
Thread t2 = new Thread(mt,"关羽");
Thread t3 = new Thread(mt,"刘备");
// 启动线程
t1.start() ;
t2.start() ;
t3.start() ;
}

------------------------------------------------------------------------------------------------------------

 

  /**  第三种方式:使用匿名内部类的方式实现
    很少见
     *    new 类名/接口名() {      *      方法重写 ;      *    } ;      */  //测试方法  //匿名内部类 @Test
private static void Test3() {     new Thread() {
public void run() {
System.out.println("线程执行了。。。。。。。");
}
}.start();
}

------------------------------------------------------------------------------------------------------------

Java中 实现多线程成的三种方式(继承,实现,匿名内部类)的更多相关文章

  1. Java中从控制台输入的三种方式

    我们最熟悉的从控制台读取一个字符或者一个字符串都知道用Scanner,那么除了Scanner还有没有其他的呢,答案是有的,我们来看看. System.in.read() System.in.read( ...

  2. JAVA中使用LDAP登录的三种方式

    搜索中关于java 登录ldap,大部分会采用  cn=xxx,ou=xxx,dc=xxx的方式,此处的cn是用户的Display Name,而不是account,而且如果ou有多层,比如我们的OU就 ...

  3. 如何实现有返回值的多线程 JAVA多线程实现的三种方式

    可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口.执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable ...

  4. Java中获取键盘输入值的三种方法

    Java中获取键盘输入值的三种方法     Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...

  5. Java反射获取class对象的三种方式,反射创建对象的两种方式

    Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName ...

  6. 在Tomcat中部署web项目的三种方式

    搬瓦工搭建SS教程 SSR免费节点:http://www.xiaokeli.me 在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Man ...

  7. Tomcat中部署web应用的三种方式

    Tomcat中部署web应用的三种方式(静态部署)       第一种,针对war或解压后的war,最为常用的是直接操作webapp目录,将完整的war包或者web应用直接放到webapp目录下.使用 ...

  8. spring中创建bean对象的三种方式以及作用范围

    时间:2020/02/02 一.在spring的xml配置文件中创建bean对象的三种方式: 1.使用默认构造函数创建.在spring的配置文件中使用bean标签,配以id和class属性之后,且没有 ...

  9. 【java多线程】多线程的创建三种方式--笔记

    申明:线程的概念以及进程的相关概念,可以参考网络上其他资料,这里只讨论多线程是怎么实现. 一.多线程的简单理解 明白什么是多线程,小生通俗一点的理解为:在一个程序里,我想同时让这个程序完成多个任务. ...

随机推荐

  1. EntityFramework之摸索EF底层(八)

    前言 此篇文章我将深入去摸索edmx中一些不为人知的东西,有时候我们需要知道Code  First模型中一些存储以及映射的原理,个人觉得那是必要的也是有用的,因为很有可能SQL会出现一些其他问题,只有 ...

  2. 【记录】vmware fusion 7 windows 10 unidentified network

    今天在 vmware fusion 7 中,使用 windows 10 时,突然报出一个错误(忘记截图了),当时就要求强制重启系统,也没怎么在意,但是重启之后,发现 windows 10 居然不能联网 ...

  3. Linux入门

    参考资料:http://www.92csz.com/study/linux/ [Linux系统目录结构] 登录系统后,在当前命令窗口下输入 ls / 你会看到 以下是对这些目录的解释: /bin bi ...

  4. 原创:跳坑指南——微信小程序真机预览跟本地不同的问题

    微信小程序中出现最多的一个问题,就是真机跟本地不同:我简单列举一些我发现的原因,给大家参考,大家也可以把自己发现的东西回复给我,给我参考:本地看不到数据,就先让本地能看到数据,再看本帖.... 1:本 ...

  5. 一种C#生成符合Java规则的二进制文件方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.一个项目中的真实问题 实际项目中,本想通过C#制作小工具生成SHP ...

  6. js实现String.Fomat

    引言 拼接字符串用习惯了C#的String.Format.今天看别人的代码在js中也封装了一个js的String.Format,用来拼接字符串和DOM. js实现和调用String.Format St ...

  7. 30 个惊艳的 Bootstrap 扩展插件

    Bootstrap 是快速开发Web应用程序的前端工具包.它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的版式,表单,buttons,表格,网格系统等等. Boo ...

  8. Unity打开摄像头占满全屏

    Unity打开摄像头占满全屏 AR项目需求,Unity打开摄像头作为背景渲染占满全屏~ Unity对设备硬件操作的API并不是太友好~打开一个摄像头,渲染到屏幕上也都得自己写,虽然步骤少,提取摄像头t ...

  9. asp.net获取客户端浏览器及主机信息

    在线预览效果:http://tool.hovertree.com/info/client/ 其中aspx页面的控件代码: <asp:ListBox runat="server" ...

  10. C#学习笔记-封装

    前言 说起来惭愧,学了大半年的C#,其实最开始就接触到了封装的部分,但是一直模模糊糊的弄不清楚,也觉得没什么影响就没怎么在意,现在才开始认真的看这部分内容,看懂了过后好多东西清晰了不少,才发现封装这个 ...