java核心技术-多线程之线程基础

说起线程,无法免俗首先要弄清楚的三个概念就是:进程、线程、协程。OK,那什么是进程,什么是线程,哪协程又是啥东西。进程:进程可以简单的理解为运行在操作系统中的程序,程序时静态代码,进程是动态运行着的代码,程序的运行需要向操作系统申请资源比如内存,文件句柄等,特别强调的是进程申请的资源都是独立的,也就是进程与进程之间资源是独立的。它被操作系统调度,所以进程是相对于操作系统的;线程:线程是进程中程序执行任务的那个,它共享着进程申请的资源;协程:可以简单的说是线程制造的轻量线程。讲完了基本的概念看看三者之前的关系图:

从关系图看是不是一目了然。对了还要强调的一点是,进程和线程都是之间或者间接受管于操作系统内核的,而协程是受管于程序,在用户态这边。既然讲到java线程,那java协程咋没听说过呢,java语言没有实现协程,实现协程的语言如python,go等,如果想在java中使用协程咋办,你可以使用协程框架kilim。

讲完概念,直接进入java线程的世界。在java中线程可以使用Thread类构造一个线程对象,没错new Thread()就是一个线程对象了,和new Date()没什么区别,就是一个java 对象实例而已,是不是很简单?这里的简单是指构造简单,但是引入之后的问题可就不简单啦(后面会讲)。我们知道对象自身是有生命周期的,普通java对象就是死与活两种生命周期状态,而对于线程对象则存在new、ready、running、block或者waitting、dead六种状态,状态转换图:

线程状态的转换是依靠JVM调用操作系统内核TCB也就是线程控制模块来实现线程状态切换的。

既然线程在java中也是个对象,那么这个对象的属性又有哪些呢?线程的属性可分为静态和动态属性,静态这里指的是,程序员不可改变的,是有jvm分配的,动态是指程序员可以自定义的虽然jvm给了默认属性值。静态属性:id等;动态属性:name,priority,deamon,group,classloader等。讲了这么多基础的东西,那来实践下才是王道。

从上面程序可以看出,我们运行程序的时候,相当于在操作系统中启动一个jvm的应用程序,也就是进程,然后jvm调用main方法,执行这个main方法的线程是主线程(也就是进程中必然有个入口线程-main thread,即至少一个线程),然后main线程启动了一个子线程。

好了,java线程基础入门篇就介绍到这,下一篇继续线程基础部分的线程内存分配知识。特别说明,本人技术和认识有限,如有错误之处,欢迎朋友们指正,万分感谢。

原文地址:https://www.cnblogs.com/xgoing/p/9488594.html

时间: 2024-10-13 05:14:24

java核心技术-多线程之线程基础的相关文章

java之 ------ 多线程(从基础到加强)

首先了解线程的一些基本知识: 1.线程的定义: 是操作系统进程中能够独立执行的实体(控制流),是处理器调度和分派的基本单位. 2.线程的属性: 并发性.共享性.动态性和结构性 3.线程的状态 然后就是java与线程的调度: 1.主要是通过实现Runnable接口和继承Thread类来实现线程的调度和操作 a.Runnable接口(里面就一个run方法,只要通过重写run方法就可以实现自己想要的线程功能) public interface Runnable { public abstract vo

java核心技术-多线程基础

进程.线程 ? 进程(Process) 是程序的运行实例.例如,一个运行的 Eclipse 就是一个进程.进程是程序向操作系统申请资源(如内存空间和文件句柄)的基本单位.线程(Thread)是进程中可独立执行的最小单位.一个进程可以包含多个线程.进程和线程的关系,好比一个营业中的饭店与其正在工作的员工之间的关系. 1.1 线程的创建.启动与运行 在 Java 中实现多线程主要用两种手段,一种是继承 Thread 类,另一种就是实现 Runnable 接口.(当然还有Callable和线程池).下

java核心-多线程(4)-线程类基础知识

1.并发 <1>使用并发的一个重要原因是提高执行效率.由于I/O等情况阻塞,单个任务并不能充分利用CPU时间.所以在单处理器的机器上也应该使用并发. <2>为了实现并发,操作系统层面提供了.但是进程的数量和开销都有限制,并且多个进程之间的数据共享比较麻烦.另一种比较轻量的并发实现是使用线程,一个进程可以包含多个线程.线程在进程中没有数量限制, 数据共享相对简单.线程的支持跟语言是有关系的.Java 语言中支持多线程. <3>Java 中的多线程是抢占式的.这意味着一个任

java中多线程的线程同步死锁问题

/* *定义一个多线程 */ package com.thread; public class TicketThread2 implements Runnable { //定义1000张票 public static int ticket = 100; Object obj = new Object(); // public boolean flag = false; // public boolean exit = false; @Override public void run() { //

Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果

1. 背景 在Java5的多线程中,可以使用Callable接口来实现具有返回值的线程.使用线程池的submit方法提交Callable任务,利用submit方法返回的Future存根,调用此存根的get方法来获取整个线程池中所有任务的运行结果. 方法一:如果是自己写代码,应该是自己维护一个Collection保存submit方法返回的Future存根,然后在主线程中遍历这个Collection并调用Future存根的get()方法取到线程的返回值. 方法二:使用CompletionServic

多线程01---多线程基础

1.进程和线程 1.进程 什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开迅雷.Xcode,系统就会分别启动2个进程 通过"活动监视器"可以查看Mac系统中所开启的进程 2.线程 什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 一个进程(程序)的所有任务都在线程中执行 比如使用酷狗播放音乐.使用迅雷下载电影,都需要在线程中执行: 3.线程的串行 1个线程中任务的执行是串行的

Java创建多线程和线程安全集合Vector

public class Test { public static Vector<String> data = new Vector<String>(); public static void main(String[] args) { for (int i = 0; i < 100; i++) { data.add("data" + i); } for (int i = 0; i < 3; i++) { Thread t = new Thread(

《Java核心技术 卷I:基础知识(原书第10版)》书摘(一)

原文地址:https://www.cnblogs.com/cpbm/p/12549315.html

Java多线程之线程的创建

好久没有更博客了,最近一直在忙工作的事情.现在终于空下来了,这2天会抓紧时间整理多线程和socket,把JavaSE结束掉. 关于多线程,首先会涉及到哪些东西呢?首先要了解线程,为什么要使用线程,线程有什么优势,线程和进程有什么区别呢?了解过大致的线程内容后,就应该编码来实现Java的多线程了.首先2种方式来创建线程类,然后调用对应的API来控制线程.然后还剩下一个最大的也是最重要的一块知识,就是线程同步.前面那些了解线程的生命周期就可以,实际编码中并不会多次写到那些编码,但是线程的同步经常要用