线程的Java实现

参考博客:(http://www.importnew.com/20672.html)

1.继承Thread

声明Thread的子类; 这种方法是创建类继承Thread,然后重写Thread中的run方法

public class MyThread extends Thread {
public void run(){
System.out.println("MyThread running");
}
}

稍微看一下Thread类的源码,原本的run方法:

/* What will be run. */
private Runnable target; @Override
public void run() {
if (target != null) {
target.run();
}
}

其中的target是run的任务,而新类直接继承Thread,重写run方法,相当于直接描述了run方法中要运行的任务。

运行Thread子类的方法

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

2.创建Thread的匿名子类

Thread thread = new Thread(){
public void run(){
System.out.println("Thread Running");
}
};
thread.start();

3.实现Runnable接口

其实通过上面的Thread源码可以发现,实现Runnable target的构建,那么Thread的run方法也就有了实际意义;因此另一个多线程的写法是新类实现Runnable接口

public class RunnableThread implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
} }

运行

public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
new Thread(new RunnableThread()).start();
}
}

4.创建实现Runnable接口的匿名类

new Thread(new Runnable(){
@override
public void run() {
System.out.println("Thread is running");
}
}).start();

5. 使用FutureTask

FutureTask实现了Runnable接口,因此FutureTask的对象也是可以当做runner的;而FutureTask对象的构造需要填入一个实现Callable接口的对象,因此:

public class CallableThread implements Callable<Integer> {
@Override
public Integer call() throws Exception {
int i = 2017;
Thread.sleep(3000);
System.out.println(Thread.currentThread().getName() + " " + i);
return i;
}
}

运行测试一下:

for (int i = 0; i < 5; i++) {
FutureTask<Integer> futureTask = new FutureTask<Integer>(new CallableThread());
new Thread(futureTask, "有返回值的线程").start();
try {
System.out.println(futureTask.get());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

但是这里有一个疑惑,就是输出是一个一个出来的,也就是看上去这五个线程是同步的,以后再研究一下,这块比较鬼

Java线程代码实现的更多相关文章

  1. Java线程堆栈分析

    不知觉间工作已有一年了,闲下来的时候总会思考下,作为一名Java程序员,不能一直停留在开发业务使用框架上面.老话说得好,机会是留给有准备的人的,因此,开始计划看一些Java底层一点的东西,尝试开始在学 ...

  2. java 线程、线程池基本应用演示样例代码回想

    java 线程.线程池基本应用演示样例代码回想 package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class Lift ...

  3. Java 线程池框架核心代码分析--转

    原文地址:http://www.codeceo.com/article/java-thread-pool-kernal.html 前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和 ...

  4. Java 线程池框架核心代码分析

    前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的.线程池应运而生,成为我们管理线程的利器.Java 通过Executor接口,提供了一种标准的方法将任务的提交过 ...

  5. java线程-synchronized实现可见性代码

    以下是一个普通线程代码: package com.Sychronized; public class SychronizedDemo { //共享变量 private boolean ready=fa ...

  6. Java线程并发:知识点

    Java线程并发:知识点   发布:一个对象是使它能够被当前范围之外的代码所引用: 常见形式:将对象的的引用存储到公共静态域:非私有方法中返回引用:发布内部类实例,包含引用.   逃逸:在对象尚未准备 ...

  7. Java线程的概念

    1.      计算机系统 使用高速缓存来作为内存与处理器之间的缓冲,将运算需要用到的数据复制到缓存中,让计算能快速进行:当运算结束后再从缓存同步回内存之中,这样处理器就无需等待缓慢的内存读写了. 缓 ...

  8. 细说进程五种状态的生老病死——双胞胎兄弟Java线程

    java线程的五种状态其实要真正高清,只需要明白计算机操作系统中进程的知识,原理都是相同的. 系统根据PCB结构中的状态值控制进程. 单CPU系统中,任一时刻处于执行状态的进程只有一个. 进程的五种状 ...

  9. 【转载】 Java线程面试题 Top 50

    Java线程面试题 Top 50 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员 的欢迎.大多数待遇丰厚的J ...

随机推荐

  1. centos6.5 设置ssh无密码登录

    :关闭防火墙 vim /etc/selinux/config 把SELINUX=enforcing修改为SELINUX=disabled   A机器root连接B机器root用户 (root用户登录) ...

  2. Tomcat之Windows环境下配置多个服务器

    在应对多项目多端口的情况配置一个服务器是远不能满足开发条件的.例如微信公众号回调域名只接受80端口,而其他项目一般为默认的8080或者自定义的其他的端口. 废话多说,直入主题 准备条件:tomcat文 ...

  3. 处理No CPU/ABI system image for target的方法

    处理No CPU/ABI system image for target的方法 最近菩提搭建完成Android开发环境后,在创建安卓模拟器的时候遇到了问题.这个问题就是图片中显示的no CPU/ABI ...

  4. 2018.07.06 BZOJ1208: HNOI2004宠物收养所(非旋treap)

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MB Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收 ...

  5. 27. Green Building 绿色建筑

    27. Green Building 绿色建筑 ①When we think of green buildings,we tend to think of new ones-the kind of h ...

  6. 201709013工作日记--Android异步通信AsyncTask

    参考相关博客:http://blog.csdn.net/liuhe688/article/details/6532519 在Android中实现异步任务机制有两种方式,Handler和AsyncTas ...

  7. (欧拉公式 很水) Coprimes -- sgu -- 1002

    链接: http://vj.acmclub.cn/contest/view.action?cid=168#problem/B Coprimes 时限:250MS     内存:4096KB     6 ...

  8. android public.xml 用法

    一.android的pulibc.xml文件 如果你用 apktoool 反编译过 apk 就知道,反编译后res/values 下有一个 public.xml 文件,内容如图   这个东西有什么用呢 ...

  9. CentOS 7 Flannel的安装与配置

    1. 安装前的准备 etcd 3.2.9 Docker 17.12.0-ce 三台机器10.100.97.236, 10.100.97.92, 10.100.97.81 etcd不同版本之间的差别还是 ...

  10. 如何统计TFS代码库中的团队项目所占用的磁盘空间

    在一个开发团队较多的研发中心,当开发人员的代码数据积累到一定程度,TFS系统的磁盘空间的使用率会逐渐成为系统管理员关注的问题.你可能会关注代码库中每个团队项目,甚至每个目录占用的的磁盘空间.不幸的,即 ...