创建线程的几种方式

说道线程,肯定会想到使用 java.lang.Thread.java这个类

那么创建线程也主要有2种方式

第一种方式:

public class MyThread extends Thread  {
    public void run() {
        System.out.println("这是MyThread线程");
    }
}

然后在调用处,执行start方法即可:

MyThread myThread = new MyThread();
myThread.start();

第二种方式实现Runnable接口:

public class MyRunnable implements Runnable {
    public void run() {
        System.out.println("这是MyThread线程");   } }

同样在执行的地方直接生命这个MyRunnable,再直接丢进线程start即可:

MyRunnable runBary = new MyRunnable();
Thread thread = new Thread(runBary);
thread.start();

这两种方式都可以用匿名类的方式来实现,但是我并不推荐;

另外使用Thread本身来实现线程还是用Runnable来做,我推荐后者,因为相对来说会比较方便,直接往线程中一扔即可,如果使用spring的线程执行器也是同样的道理,往执行器中丢入这个runnable即可

需要注意的是,执行线程的时候可以使用start()方法或者run()方法,虽然使用run会达到同样的效果,

但是run是在主线程中使用的,也就是使用你当前的方法内线程,而不是另起一个线程,这样就达不到异步的效果,所以务必使用start()

 

时间: 2024-10-28 07:28:50

创建线程的几种方式的相关文章

java创建线程的三种方式及其对比

Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实例,即创建了线程对象. (3)调用线程对象的start()方法来启动该线程. package com.thread; public class FirstThreadTest extends Thread{ int i = 0; //重写run方法,run方法的方

Java创建线程的两种方式_java

前言 多线程是我们开发过程中经常遇到的,也是必不可少需要掌握的.当我们知道需要进行多线程开发时首先需要知道的自然是如何实现多线程,也就是我们应该如何创建线程. 在Java中创建线程和创建普通的类的对象操作是一样的,我们可以通过两种方式来创建线程: 1.继承Thread类,并重写run()方法. 2.实现Runnable接口,并实现run()方法. 方法一:继承Thread类 代码非常简单 首先重载一个构造函数,以便我们可以给线程命名. 重写run()方法. 这里我们先让线程输出线程名+start

JS中创建函数的三种方式及区别_基础知识

1.函数声明 function sum1(n1,n2){ return n1+n2; }; 2.函数表达式,又叫函数字面量 var sum2=function(n1,n2){ return n1+n2; }; 两者的区别:解析器会先读取函数声明,并使其在执行任何代码之前可以访问:而函数表达式则必须等到解析器执行到它所在的代码行才会真正被解释执行. 自执行函数严格来说也叫函数表达式,它主要用于创建一个新的作用域,在此作用域内声明的变量,不会和其它作用域内的变量冲突或混淆,大多是以匿名函数方式存在,

修改和创建DOM节点两种方式的4种优化方案

原文:<Speeding up JavaScript: Working with the DOM>作者:KeeKim Heng, Google Web Developer翻译:http://www.blogjava.net/emu/archive/2010/03/01/314185.html 在我们开发互联网富应用(RIA)时,我们经常写一些javascript脚本来修改或者增加页面元素,这些工作最终是DOM--或者说文档对象模 型--来完成的,而我们的实现方式会影响到应用的响应速度. DOM

javascript创建函数的20种方式汇总

       这篇文章主要介绍了javascript创建函数的20种方式汇总的相关资料,需要的朋友可以参考下             工作中常常会创建一个函数来解决一些需求问题,以下是个人在工作中总结出来的创建函数20种方式,你知道多少? ? 1 2 3 4 5 6 7 8 function sayHello(){ console.log('hello'); } function leave(){ console.log('goodbye'); } //test sayHello(); 为完成需

JavaScript创建闭包的两种方式的优劣与区别分析

  这篇文章主要介绍了JavaScript创建闭包的两种方式的优劣与区别分析的相关资料,需要的朋友可以参考下 通常JavaScript创建闭包比较常用的有两种方式. 构造函数方式: ? 1 2 3 new function() { var 变量... } 内联执行方式: ? 1 2 3 (function() { var 变量... })(); 在JavaScript内部运行机制下他们有什么区别?用哪种方式创建比较好?它与其它方式创建的闭包相比有什么优势? 我是这样理解的: 区别: 第一个:子方

EasyUI创建对话框的两种方式_jquery

对话框(Dialog)是一个特殊的窗口(window),可以包含在顶部的工具栏和在底部的按钮.默认情况下,对话框(Dialog)不能改变大小,但是用户可以设置 resizable 属性为 true,使其可以改变大小. 这种就是对话框了. EasyUI有两种创建方式: 第一种:通过已存在的DOM节点元素标签创建 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org

Java创建数组的几种方式总结_java

1.一维数组的声明方式: type[] arrayName; 或 type arrayName[]; 附:推荐使用第一种格式,因为第一种格式具有更好的可读性,表示type[]是一种引用类型(数组)而不是type类型.建议不要使用第二种方式 下面是典型的声明数组的方式: // 声明整型数组 int[] intArray0 ; int intArray1 []; // 声明浮点型数组 float floatArray0 []; float[] floatArray1 ; // 声明布尔型数组 boo

Java的线程安全四种方式五个等级

四种方式 sychronized关键字 sychronized method(){} sychronized (objectReference) {/*block*/} static synchronized method(){} sychronized(classname.class) 其中1和2是代表锁当前对象,即一个对象就一个锁,3和4代表锁这个类,即这个类的锁 要注意的是sychronized method()不是锁这个函数,而是锁对象,即:如果这个类中有两个方法都是sychronize