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

   

  /**  第一种方式:继承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. Attach Volume 操作(Part II) - 每天5分钟玩转 OpenStack(54)

    上一节我们讨论了 attach volume 操作中 cinder-api 的工作,本节讨论 cinder-volume 和 nova-compute 如何将 volume attach 到 Inst ...

  2. Web API接口之FileReader

    Web API接口之FileReader *:first-child { margin-top: 0 !important; } body>*:last-child { margin-botto ...

  3. AOP的实现机制--转

    原文地址:http://www.iteye.com/topic/1116696 1 AOP各种的实现 AOP就是面向切面编程,我们可以从几个层面来实现AOP. 在编译器修改源代码,在运行期字节码加载前 ...

  4. C/C++ 双精度double 数据相加出错缺陷解释

    不知道有没有人和我一样遇到过这样一个问题,请看下面代码. #include<iostream> using namespace std; int main(){ double a=2.3, ...

  5. iOS 如何在整个屏幕中都能实现滑动返回的效果

    - (void)setupGetsInNav { UIGestureRecognizer *gesture = self.interactivePopGestureRecognizer; gestur ...

  6. Sybase数据库,普通表修改分区表步骤

    本文目标:指导项目侧人员再遇到此类改动需求时可以自己参照更改.需求:Sybase数据库,普通表t_jingyu修改为按天分区的分区表. 1.sp_help查看t_jingyu的表结构,索引等信息 sp ...

  7. 认识Java Core和Heap Dump

    什么是Java Core和Heap Dump Java程序运行时,有时会产生Java Core及Heap Dump文件,它一般发生于Java程序遇到致命问题的情况下. 发生致命问题后,Java进程有时 ...

  8. .net提交HTML元素到后台,遇到Request报错 解决方案

    对于.NET MVC 项目来说,在Controller中对应的Action方法上打上标签: [ValidateInput(false)] 在MSDN上:HttpRequest 类使用输入验证标志来跟踪 ...

  9. 【开源框架】SqlSugarRepository 全库ORM 正式发布

    SqlSugarRepository.dll 全库开发框架支持 四种数据库:SqlServer. MySql .Oracle和Sqlite. SqlSugarRepository是为全库开发而生的OR ...

  10. 4.DB Initialization(数据库初始化)[EF Code-First系列]

    前面的例子中,我们已经看到了Code-First自动为我们创建数据库的例子. 这里我们将要学习的是,当初始化的时候,Code-First是怎么决定数据库的名字和服务的呢??? 下面的图,解释了这一切! ...