• 概述
    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. (dp)343. Integer Break

    Given a positive integer n, break it into the sum of at least two positive integers and maximize the ...

  2. Spark SQL Example

     Spark SQL Example This example demonstrates how to use sqlContext.sql to create and load a table ...

  3. 【转】HTML5 jQuery图片上传前预览

    hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images,本例子主要是使用HTML5 的File API,建立一個可存取到该 file的url,一个空的img标签,ID为img0,把选 ...

  4. StackPanel在增加控件的问题

    今天遇到这样一个问题,就是我做了一个自定义控件.然后加到StackPanel中, <StackPanel Height="676" HorizontalAlignment=& ...

  5. [Android]android studio预览视图时报错

    报错信息: 详细报错信息: java.lang.NoSuchMethodError: com.android.ide.common.rendering.api.LayoutlibCallback.ge ...

  6. 关于android.view.WindowManager$BadTokenException问题出现以及解决的一些记录

    1.出现 在app showdialog()时偶尔会出现,根据stackoverflow.com的描述,貌似是show的时候用作context的activity以及destroy了,,,一些异步操作会 ...

  7. extends 和 implements

    extends是继承类与类的 implements是实现接口的 类与类之间只支持单继承 接口与接口之间支持多继承

  8. Can't use Subversion command line client:svn

    在Intellij IDEA里checkout东西时出先这个错误提示:Can't use Subversion command line client:svn Subversion command l ...

  9. css3动画2(transform用法)

    1.直接写在样式里,比如一个小箭头,transform:rotate(135deg)即可 2.写动画过程,@keyframes和transform和animation组合起来用 写在@keyframe ...

  10. js事件(一)之事件流

    1.事件流定义 事件发生时会在元素节点与根节点之间按照特定的顺序传播,路径所经过的所有节点都会收到该事件,这个传播过程即DOM事件流. 事件传播的顺序对应浏览器的两种事件流模型:捕获型事件流和冒泡型事 ...