1.Thread

/**
*
*/
package testJava2.thread; /**
* @author xxx.sjtu
* @function
* @date 2017年5月17日
* @version
*/
public class FirstThreadTest extends Thread {
int i = 0; public FirstThreadTest(int i) {
super();
this.i = i;
} public FirstThreadTest() {
super();
// TODO Auto-generated constructor stub
} public FirstThreadTest(Runnable target, String name) {
super(target, name);
// TODO Auto-generated constructor stub
} public FirstThreadTest(Runnable target) {
super(target);
// TODO Auto-generated constructor stub
} public FirstThreadTest(String name) {
super(name);
// TODO Auto-generated constructor stub
} public FirstThreadTest(ThreadGroup group, Runnable target, String name,
long stackSize) {
super(group, target, name, stackSize);
// TODO Auto-generated constructor stub
} public FirstThreadTest(ThreadGroup group, Runnable target, String name) {
super(group, target, name);
// TODO Auto-generated constructor stub
} public FirstThreadTest(ThreadGroup group, Runnable target) {
super(group, target);
// TODO Auto-generated constructor stub
} public FirstThreadTest(ThreadGroup group, String name) {
super(group, name);
// TODO Auto-generated constructor stub
} // 重写run方法,run方法的方法体就是现场执行体
public void run() {
//当前线程: this
System.out.println(this.getName() + " " + i);
} public static void main(String[] args) {
System.out.println(Thread.currentThread().getName());
new FirstThreadTest(888).start();
}
}

2.Runnable

/**
*
*/
package testJava2.thread; /**
* @author xxx.sjtu
* @function
* @date 2017年5月17日
* @version
*/
public class RunnableThreadTest implements Runnable { private int i; public RunnableThreadTest() {
super();
// TODO Auto-generated constructor stub
} public RunnableThreadTest(int i) {
super();
this.i = i;
} @Override
public void run() {
//当前线程: Thread.currentThread()
System.out.println(Thread.currentThread().getName() + " " + i);
} public static void main(String[] args) {
System.out.println(Thread.currentThread().getName());
RunnableThreadTest rtt = new RunnableThreadTest(999);
new Thread(rtt, "新线程1").start();
}
}

3.Callable

/**
*
*/
package testJava2.thread; import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask; /**
* @author xxx.sjtu
* @function
* @date 2017年5月17日
* @version
*/
public class CallableThreadTest implements Callable<Integer> { @Override
public Integer call() throws Exception {
int i = 2017;
System.out.println(Thread.currentThread().getName() + " " + i);
return i;
} public static void main(String[] args) {
CallableThreadTest ctt = new CallableThreadTest();
FutureTask<Integer> ft = new FutureTask<>(ctt);
new Thread(ft, "有返回值的线程").start();
try {
System.out.println("子线程的返回值:" + ft.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} } }

java多线程的3种写法的更多相关文章

  1. Java 单例模式的七种写法

    Java 单例模式的七种写法 第一种(懒汉,线程不安全) public class Singleton { private static Singleton instance; private Sin ...

  2. 单例模式:Java单例模式的几种写法及它们的优缺点

    总结下Java单例模式的几种写法: 1. 饿汉式 public class Singleton { private static Singleton instance = new Singleton( ...

  3. Java多线程的三种实现方式

    java多线程的三种实现方式 一.继承Thread类 二.实现Runnable接口 三.使用ExecutorService, Callable, Future 无论是通过继承Thread类还是实现Ru ...

  4. java多线程的几种实现方式

    java多线程的几种实现方式 1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target3.通 ...

  5. 阿里巴巴--java多线程的两种实现方式,以及二者的区别

    阿里巴巴面试的时候,昨天问了我java面试的时候实现java多线程的两种方式,以及二者的区别当时只回答了实现线程的两种方式,但是没有回答上二者的区别: java实现多线程有两种方式: 1.继承Thre ...

  6. java单例模式的几种写法比较

    概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...

  7. Java单例模式的6种写法

    在Java中,单例有很多种写法,面试时,手写代码环节,除了写算法题,有时候也会让手写单例模式,这里记录一下单例的几种写法和优缺点. 初级写法 懒汉式 饿汉式 双锁检验 内部类 枚举式 1.初级写法 p ...

  8. 【Java多线程】两种基本实现框架

    Java多线程学习1——两种基本实现框架 一.前言 当一个Java程序启动的时候,一个线程就立刻启动,改程序通常也被我们称作程序的主线程.其他所有的子线程都是由主线程产生的.主线程是程序开始就执行的, ...

  9. java多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

    多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有两种,分别是synchronized,wait与notify 先看一下java线程运行时各个阶段的运行状态 j ...

随机推荐

  1. 文件处理(如果文件存在则追加,不存在则生成多级文件夹以及txt目录)

    public static void writeFile(String path,String fileName,String content) throws IOException { File f ...

  2. Cocos Creator存储和读取用户数据--官方文档

    存储数据 cc.sys.localStorage.setItem(key, value) 上面的方法需要两个参数,用来索引的字符串键值 key,和要保存的字符串数据 value. 假如我们要保存玩家最 ...

  3. Sklearn线性回归

    Sklearn线性回归 原理 线性回归是最为简单而经典的回归模型,用了最小二乘法的思想,用一个n-1维的超平面拟合n维数据 数学形式 \[y(w,x)=w_0+w_1x_1+w_2x_2+-+w_nx ...

  4. c c++ #define 定义假函数

    #define   Add(a,b)   ((a)+(b)) #define Max(a,b) ((a)>(b)?(a):(b)) 这就定义了一个假的函数 说白了就是字符串替换 这样在写代码时能 ...

  5. sql 索引笔记2

    以下资料都来于MSDN. 聚集索引指南: 一.此列和列值供内部使用,用户不能查看或访问. 查询注意事项 在创建聚集索引之前,应先了解数据是如何被访问的.考虑对具有以下特点的查询使用聚集索引: 使用运算 ...

  6. CentOS7 yum 安装与配置MySQL5.7

    安装环境:CentOS7 64位 MINI版,安装MySQL5.7 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:https://dev.mysql.com/downloads/rep ...

  7. 基于SOUI开发一个简单的小工具

    基于DriectUI有很多库,比如 Duilib (免费) soui (免费) DuiVision (免费) 炫彩 (界面库免费,UI设计器付费,不提供源码) skinui (免费使用,但不开放源码, ...

  8. C# Task WaitAll和WaitAny

    Task 有静态方法WaitAll和WaitAny,主要用于等待其他Task完成后做一些事情,先看看其实现部分吧: public class Task : IThreadPoolWorkItem, I ...

  9. ArcGIS鼠标滚轮方向之代码篇

    Desktop10.X有多个版本,不同版本的注册表路径不一致,注册表中可能残留多个版本的注册信息:也可能没有Desktop,而是Engine.其实可以通过RuntimeManager.ActiveRu ...

  10. VS2015 ionic 开发环境配置纪要

    1)第一次安装Tools for Apache Cordova不成功,到Options检查依赖项,缺少Node等,重新下载了32为的nodeJs安装.然后运行VS安装程序,卸载Tools for Ap ...