Java线程及其实现方式
一、线程&多线程
线程:
线程是进程的一个实体,是 CPU 调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程 自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是 它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
多线程:
多线程指在单个程序中可以同时运行多个不同的线程执行不同的任务。
多线程编程的目的,就是“最大限度地利用 cpu 资源”,当某一线程的处理不需要占用 cpu 而只和 io 等资源 打交道时,让需要占用 Cpu 的其他线程有其他机会获得 cpu 资源。从根本上说,这就是多线程编程的最终 目的。
二、线程实现的方式
- Thread
- Runnable
- Callable
Thread:
继承Thread类并重写run方法。其实Thread是实现Runnable接口来实现线程,class Thread implements Runnable {。
public class Test {
public static void main(String[] args) {
Thread01 thread01 = new Thread01();
thread01.start();
}
}
class Thread01 extends Thread {
@Override
public void run() {
System.out.println("线程01执行了。。。");
}
}
Runnable:
实现Runnable并实现run方法,将Runnable放入到Thread中start即可。
public class Test {
public static void main(String[] args) {
Thread thread = new Thread(new Runnable01());
thread.start();
}
}
class Runnable01 implements Runnable{
public void run() {
System.out.println("Runnable01 running....");
}
}
第一种方法通过覆盖Thread中的run方法来实现线程,第二种方法中,通过源码可以发现,Thread中run方法的代码为:
public void run() {
if (target != null) {
target.run();
}
}
传入的Runnable就是target,所以当我们执行Thread.start()的时候,其实是执行的Runnable的run方法。
Callable:
实现Callable重写call方法,实现Callable和实现Runnable类似,但是功能更强大,具体表现在:
- 可以在任务结束后提供一个返回值,Runnable不行
- call方法可以抛出异常,Runnable的run方法不行
- 可以通过运行Callable得到的Fulture对象监听目标线程调用call方法的结果,得到返回值,(fulture.get(),调用后会阻塞,直到获取到返回值)
public class Test {
public static void main(String[] args) throws Exception {
System.out.println("main的线程:" + Thread.currentThread().getName());
Callable01 callable01 = new Callable01();
FutureTask<Integer> ft = new FutureTask<Integer>(callable01);
Thread thread = new Thread(ft);
thread.start();
System.out.println(ft.get()); //获得线程执行返回结果
}
}
class Callable01 implements Callable<Integer> {
public Integer call() throws Exception {
System.out.println("Callable01的线程:" + Thread.currentThread().getName());
return 111;
}
}
将Fulture放入Thread,能想到Fulture应该也实现了Runnable接口:

Java线程及其实现方式的更多相关文章
- Java线程的创建方式三:Callable(四)
一.Java实现多线程的三种方式 方式一:继承Thread类: public class Test extends Thread { public static void main(String[] ...
- Java线程同步的方式
java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的 ...
- java 线程传参 方式
第一类:主动向线程传参 public class ThreadTest extends Thread { public ThreadTest() { } /** * 第一种通过构造方法来传递参数 ...
- Java线程的启动与中止
一.线程与进程的关系 关于进程与线程,百度百科上是这样描述的: 进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 在当 ...
- Java 线程间通讯(共享变量方式)
Java线程间通讯,最常用的方式便是共享变量方式,多个线程共享一个静态变量就可以实现在线程间通讯,但是这需要注意的就是线程同步问题. 一.没考虑线程同步: package com.wyf; publi ...
- Java线程间通信-回调的实现方式
Java线程间通信-回调的实现方式 Java线程间通信是非常复杂的问题的.线程间通信问题本质上是如何将与线程相关的变量或者对象传递给别的线程,从而实现交互. 比如举一个简单例子,有一个多线程的 ...
- Java线程的三种方式
创建线程有三种方式: 1.继承Thread类 2.实现Runnable接口 3.使用Callable和Future创建线程 三种方式详解如下: ---------------------------- ...
- java线程实现的四种方式
java多线程的实现可以通过以下四种方式 1.继承Thread类,重写run方法 2.实现Runnable接口,重写run方法 3.通过Callable和FutureTask创建线程 4.通过线程池创 ...
- [转载]Java线程的两种实现方式
转载:http://baijiahao.baidu.com/s?id=1602265641578157555&wfr=spider&for=pc 前言 线程是程序的一条执行线索,执行路 ...
随机推荐
- vue+webpack工程环境搭建
使用Vue-cli脚手架(属于vue全家桶)快速构建一个项目: [1]首先需要安装好node.js; [2]安装webpack,指令$npm install -g webpack; //如果之前有安装 ...
- python3.7安装pygame
经过各种找,下面这个安装地址中的版本是最全的 下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame 本机python版本
- 学会了这些redis知识点,面试官会觉得你很nb(转自十年技术大牛)
是数据结构而非类型 很多文章都会说,redis支持5种常用的数据类型,这其实是存在很大的歧义.redis里存的都是二进制数据,其实就是字节数组(byte[]),这些字节数据是没有数据类型的,只有把它们 ...
- jupyternotebook安装
本篇阅读目录 一.Jupyter notebook环境安装 二.爬虫介绍 回到顶部 一.Jupyter notebook环境安装 1.Anaconda 以及 安装步骤 Anaconda指的是一个开源的 ...
- 5G 将带给程序员哪些新机会呢?
5G,第 5 代移动通信技术,华为在此领域远远领先同行,这也让它成了中美贸易战的最前线.我的第一份工作就在通信行业,当时电信标准都在欧美企业手里,国内企业主要是遵照标准研发软硬件设备,核心芯片靠进口. ...
- 一个和与后台数据连接的模板get post put 以及延伸的query
/* example: require.config({ paths: { "httpClient": "../../core/http-client" } } ...
- java-随机点名器(新手)
//创建的一个包名. package qige; //导入一个包.import java.util.Random; //定义一个类.public class Zy1 { //公共静态的主方法. pub ...
- 面向对象第三单元博客(JML)
// demo/Graph.java package demo; import java.util.ArrayList; public class Demo { /*@ public norm ...
- Journal of Proteome Research | Proteomic Profiling of Rhabdomyosarcoma-Derived Exosomes Yield Insights into Their Functional Role in Paracrine Signaling (解读人:孙国莹)
文献名:Proteomic Profiling of Rhabdomyosarcoma-Derived Exosomes Yield Insights into Their Functional Ro ...
- DIV常用属性大全
目录 一.属性列表 二.常用属性 三.一些特殊效果 四.定位和控制 一.属性列表 color : #999999 文字颜色 font-family : 宋体 文字字型 font-size : 10pt ...