• 概述
    Java线程是一个在实战开发中经常使用的基础功能,而在Java中线程相关的类在java.lang和java.util.concurrent里

  • Thread

package thread.base;

/**
 * User: likang
 * Date: 16/8/14
 * Time: 下午4:27
 */
public class TestThread extends Thread {
    private Integer index;
    private String name;

    public TestThread(String name, Integer index) {
        this.name = name;
        this.index = index;
    }

    public void run() {
        try {
            Thread.sleep(1000l);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(name + "Thread index:" + index);
    }
}
  • Runnable
package thread.base;

/**
 * User: likang
 * Date: 16/8/14
 * Time: 下午4:32
 */
public class TestRunnable implements Runnable {
    private Integer index;
    private String name;

    public TestRunnable(String name, Integer index) {
        this.name = name;
        this.index = index;
    }

    public void run() {
        try {
            Thread.sleep(1000l);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(name + "Runnable index:" + index);
    }
}
  • Callable
package thread.base;

import java.util.concurrent.Callable;

/**
 * User: likang
 * Date: 16/8/14
 * Time: 下午4:35
 */
public class TestCallable implements Callable<String> {
    private Integer index;
    private String name;

    public TestCallable(String name, Integer index) {
        this.name = name;
        this.index = index;
    }

    @Override
    public String call() throws Exception {
        try {
            Thread.sleep(1000l);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return name + "Callable index:" + index;
    }
}
  • 实例测试
import thread.base.TestCallable;
import thread.base.TestRunnable;
import thread.base.TestThread;

import java.util.concurrent.*;

/**
 * User: likang
 * Date: 16/8/14
 * Time: 下午4:26
 */
public class ThreadTest {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        System.out.println("测试第一部分 Thread");
        for (Integer i = 0; i < 5; i++) {
            TestThread testThread = new TestThread("第一部分 ", i);
            testThread.start();
        }
        System.out.println("测试第二部分 Runnable+Thread");
        for (Integer i = 0; i < 5; i++) {
            TestRunnable testRunnable = new TestRunnable("第二部分 ", i);
            new Thread(testRunnable).start();
        }
        System.out.println("测试第三部分 Callable+Thread");
        for (Integer i = 0; i < 5; i++) {
            TestCallable testCallable = new TestCallable("第三部分 ", i);
            FutureTask<String> futureTask = new FutureTask<String>(testCallable);
            new Thread(futureTask).start();

            String result = futureTask.get();
            System.out.println(result);
        }
        System.out.println("测试第四部分 Runnable+CachedThreadPool");
        for (Integer i = 0; i < 5; i++) {
            ExecutorService executorService = Executors.newCachedThreadPool();
            TestRunnable testRunnable = new TestRunnable("第四部分 ", i);
            executorService.submit(testRunnable);
        }
        System.out.println("测试第五部分 Runnable+CachedThreadPool");
        for (Integer i = 0; i < 5; i++) {
            ExecutorService executorService = Executors.newCachedThreadPool();
            TestCallable testCallable = new TestCallable("第五部分 ", i);
            Future<String> future = executorService.submit(testCallable);
            System.out.println(future.get());
        }
        System.out.println("测试第六部分 Callable+CompletionService+CachedThreadPool");
        ExecutorService executorService = Executors.newCachedThreadPool();
        CompletionService<String> completionService = new ExecutorCompletionService<String>(executorService);
        for (Integer i = 0; i < 5; i++) {
            TestCallable testCallable = new TestCallable("第六部分 ", i);
            completionService.submit(testCallable);
        }
        for (Integer i = 0; i < 5; i++) {
            Future<String> future = completionService.take();
            System.out.println(future.get());
        }
        System.out.println("End");
    }
}

Java线程基础实例的更多相关文章

  1. Java 线程基础

    Java 线程基础

  2. Java线程基础知识(状态、共享与协作)

    1.基础概念 CPU核心数和线程数的关系 核心数:线程数=1:1 ;使用了超线程技术后---> 1:2 CPU时间片轮转机制 又称RR调度,会导致上下文切换 什么是进程和线程 进程:程序运行资源 ...

  3. java线程基础知识----线程与锁

    我们上一章已经谈到java线程的基础知识,我们学习了Thread的基础知识,今天我们开始学习java线程和锁. 1. 首先我们应该了解一下Object类的一些性质以其方法,首先我们知道Object类的 ...

  4. java线程基础巩固---线程生命周期以及start方法源码剖析

    上篇中介绍了如何启动一个线程,通过调用start()方法才能创建并使用新线程,并且这个start()是非阻塞的,调用之后立马就返回的,实际上它是线程生命周期环节中的一种,所以这里阐述一下线程的一个完整 ...

  5. Java 线程基础知识

    前言 什么是线程?线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程 ID,当前指令指针 (PC),寄存器集合和堆栈组成.另外,线 ...

  6. 线程之一:JAVA线程基础

    参考core java,马士兵视频 1.线程的基本概念 (1)一个线程是一个程序内部的顺序控制流. (2)线程和进程 –每个进程都有独立的代码和数据空间(进程上下文),进程切换的开销大. –线程:轻量 ...

  7. java线程池实例

    目的         了解线程池的知识后,写个线程池实例,熟悉多线程开发,建议看jdk线程池源码,跟大师比,才知道差距啊O(∩_∩)O 线程池类 package thread.pool2; impor ...

  8. java线程基础知识----线程基础知识

    不知道从什么时候开始,学习知识变成了一个短期记忆的过程,总是容易忘记自己当初学懂的知识(fuck!),不知道是自己没有经常使用还是当初理解的不够深入.今天准备再对java的线程进行一下系统的学习,希望 ...

  9. 线程之一:JAVA线程基础 分类: B1_JAVA 2013-10-10 12:48 662人阅读 评论(0) 收藏

    参考core java,马士兵视频 1.线程的基本概念 (1)一个线程是一个程序内部的顺序控制流.   (2)线程和进程 –每个进程都有独立的代码和数据空间(进程上下文),进程切换的开销大. –线程: ...

随机推荐

  1. Creating a radius based VPN with support for Windows clients

    This article discusses setting up up an integrated IPSec/L2TP VPN using Radius and integrating it wi ...

  2. Boot 44b0x by uboot

    1. Creat a branch from tag v2013.10-rc4 2. Build it: make B2 Install NFS service for Ubuntu 12.04 1. ...

  3. JAVA IO 学习

    Java流的分类 1.输入/输出流 输入流:只能向其读数据,不能写. 输出流:只能向其写数据,不能读. 所谓的输入输出都是相对应用程序而言的. 2.字节流/字符流 单位不同,字节流操作8位,字符流操作 ...

  4. Android: R cannot be resolved to a varia...

    Android: R cannot be resolved to a varia... 2012-07-27 10:58:32     上传者: wangdao下载(0) 浏览(57568) 评论(0 ...

  5. qt 环境下mapx组件打包后编译产生c2248和c2512错误

    C:\Qt\Qt5.6.0\5.6\msvc2013\include\QtCore\qmetatype.h:760: error: C2248: “MapSpace::IRowCursor::IRow ...

  6. gdb 调试程序

    要调试生成的可执行程序,必须在生成的时候加入-g选项,生成可以调试的代码 例如:gcc -o test a.c b.c -g 这样gcc就会在链接的时候加入一些用于调试的符号 在生成可以调试的可执行程 ...

  7. 我刚知道的WAP app中meta的属性

    之前我一直做的都是WEB前端开发,来北京以后面试了一个移动前端开发,WAP前端开发. 其实在原来公司的时候也做过这方面的开发,可面试的时候面试官问我,要想强制让文档与设备的宽度保持1:1,mate标签 ...

  8. 使用onclick跳转到其他页面/跳转到指定url

    ☆如果是本页显示可以直接用location,方法如下: ①onclick="javascript:window.location.href='URL'" ②onclick=&quo ...

  9. linux(Debian) 中的cron计划任务配置方法

    cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情.用crontab配置是针对某个用户的 ...

  10. Json的序列化与反序列化

    对于Json的序列化和反序列化,如果自己编写源代码来实现的话,很复杂很烦,所以我采用的是使用别人已经写好的引用文件.这类文件网上有很多,我用的是LitJson,当然Newtonsoft也可以,但后者需 ...