多线程-Thread、Runnable、Callbale、Future
Thread:java使用Thread代表线程,所有的线程对象都必须是Thread类或其子类,可以通过继承Thread类来创建并启动多线程。
package org.github.lujiango;
public class Test10 {
static class MyThread extends Thread {
@Override
public void run() {
System.out.println("I am extend Thread...");
}
}
public static void main(String[] args) {
MyThread mt = new MyThread();
mt.start();
}
}
Runnbale:可以通过实现Runnable接口来创建多线程,创建Runnable实现类的实例,并以此作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。
package org.github.lujiango;
public class Test11 {
static class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("I am implement Runnable...");
}
}
public static void main(String[] args) {
Thread t = new Thread(new MyRunnable());
t.start();
}
}
Callable:从Java 5开始,Java提供了Callable接口,提供了一个call方法可以作为线程执行体,但是call方法可以有返回值,可以声明抛出异常。Java5提供了Future接口来代表call方法的返回值,并为Future提供了一个FutureTask实现类,该实现类实现了Future和Runnable。
package org.github.lujiango; import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask; public class Test12 { static class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
return "my callable";
}
} public static void main(String[] args) throws InterruptedException, ExecutionException {
MyCallable callable = new MyCallable();
FutureTask<String> future = new FutureTask<String>(callable);
new Thread(future).start();
System.out.println(future.get()); } }
创建线程的三种方式比较:
通过继承Thread类或实现Runnable,Callable接口都可以实现多线程。
采用Runnable,Callable接口的方式创建多线程
(1)线程类只是实现了Runnable接口或Callable接口,还可以继承其它类。
(2)多线程可以共享一个target对象,所以合适多个相同线程来处理同一份资源的情况,从而可以将CPU,代码和数据分开,形成清晰的模型,较好的体现了面向对象的思想。
(3)编程稍微复杂,如果需要访问当前线程,则必须使用Thread.currentThread()方法
采用继承Thread类的方法创建多线程
(1)因为多线程类已经继承了Thread类,所以不能在继承其它父类。
(2)编写简单,如果需要访问当前线程,则无须使用Thread.currentThread()方法,直接使用this即可获得当前线程。
多线程-Thread、Runnable、Callbale、Future的更多相关文章
- 第39天学习打卡(多线程 Thread Runnable 初始并发问题 Callable )
多线程详解 01线程简介 Process与Thread 程序:是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念. 进程则是执行程序的一次执行过程,它是一个动态的概念.是系统资源分配的 ...
- android 多线程Thread,Runnable,Handler,AsyncTask
先看两个链接: 1.http://www.2cto.com/kf/201404/290494.html 2. 链接1: android 的多线程实际上就是java的多线程.android的UI线程又称 ...
- java 多线程--- Thread Runnable Executors
java 实现多线程的整理: Thread实现多线程的两种方式: (1)继承 Thread类,同时重载 run 方法: class PrimeThread extends Thread { long ...
- [java多线程] - Thread&Runnable运用
负载是一个很大的话题,也是一个非常重要的话题.不管是在大的互联网软件中,还是在一般的小型软件,都对负载有一定的要求,负载过高会导致服务器压力过大:负载过低又比较浪费服务器资源,而且当高请求的时候还可能 ...
- java中多线程中Runnable接口和Thread类介绍
java中的线程时通过调用操作系统底层的线程来实现线程的功能的. 先看如下代码,并写出输出结果. // 请问输出结果是什么? public static void main(String[] args ...
- Java多线程高并发学习笔记(一)——Thread&Runnable
进程与线程 首先来看百度百科关于进程的介绍: 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动.它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体.它不只是程序的代码,还包括当前的 ...
- JAVA多线程Thread VS Runnable详解
要求 必备知识 本文要求基本了解JAVA编程知识. 开发环境 windows 7/EditPlus 演示地址 源文件 进程与线程 进程是程序在处理机中的一次运行.一个进程既包括其所要执行的指令,也 ...
- 多线程-Thread、Runnable 创建线程和调用过程分析
创建线程的两种方式: 1:创建Thread类的子类 ---基于继承的技术 . 2:以Runnable接口实例为构造参数直接通过new 创建 Thread 实例.---基于组合的技术. public ...
- 多线程-----Thread类与Runnable接口的区别
第一个继承Thread类来实现多线程,其实是相当于拿出三件事即三个卖早餐10份的任务分别分给三个窗口,他们各做各的事各卖各的早餐各完成各的任务,因为MyThread继承Thread类,所以在newMy ...
- Java多线程Thread
转自:http://www.cnblogs.com/lwbqqyumidi/p/3804883.html Java总结篇系列:Java多线程(一) 多线程作为Java中很重要的一个知识点,在此还是 ...
随机推荐
- JS跳转页面的几种方法
JS的几种跳转方式: 1. window.open(”url“) 2.用自定义函数 <script> function openWin(tag,obj) { obj.target=&quo ...
- iOS:自动读取图片插件KSImageNamed-Xcode-master的使用
gitHub链接:https://github.com/ksuther/KSImageNamed-Xcode KSImageNamed-Xcode是一个Xcode插件,可以帮助开发者在Xcode中 ...
- AHB总线RAM Verilog实例
//*************************************************************************** // Copyright(c)2017, L ...
- 实现淡入淡出效果的组件,继承自JComponent
由于仅贴出代码,供有缘人参考. import java.awt.AlphaComposite; import java.awt.Graphics; import java.awt.Graphics2D ...
- 创业之前 ——Paul Graham 最新博文
原文:Paul Graham 译者:李智维 /LeanCloudproject师 2014年10月 (这篇文章是我在斯坦福大学举办的Sam Altman创业课堂上的嘉宾演讲稿.本意是写给大学生的,但当 ...
- linux-文件系统基本概念
linux中全部数据都是用文件存储,存放在文件夹中,文件夹呈树状结构. (一)文件类型 1.普通文件 包含文本文件.源码文件及可运行文件等.linux中不区分文本和二进制文件. 2.文件夹 类似win ...
- PHP基础知识(一)
The Basics Comparison operators Comparison operators are an often overlooked aspect of PHP, which ca ...
- wamp server php环境绑定域名
思路: 用花生壳做动态域名解析 用wamp server 在本机上做一个 php web server; 这样就可以让一台内网电脑做一个测试用的服务器: 一:wamp server php环境绑定域名 ...
- Android app启动耗时分析
前言 app启动耗时过长的话,无论你的app里面的内容多么丰富有趣,作为一个用户,首先是没有耐心去等待的,如果我是一个用户,我会这样想:这是什么垃圾公司出的什么烂app,再等2s不进来就卸载,黑人问号 ...
- python——python数据结构之栈、队列的实现
这个在官网中list支持,有实现. 补充一下栈,队列的特性: 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIF ...