java线程理解001

概念:线程和进程

进程:简单的说,进程就是一个应用,即一个程序。现在的操作系统普遍都是多进程的操作系统。比如:你可以同时打开音乐播放器,也可以同时打开浏览器和视频播放器。

线程:线程,存在于进程之中,理解为一个进程中有多个线程。现在的程序也大多是多线程程序。比如:一个音乐播放器既可以同时播放音乐,也可以同时下载音乐。

单线程和多线程的执行顺序:

单线程程序执行:线程执行逐步向下,最终结束。

多线程程序执行:两个线程间快速切换(抢夺CPU资源),获得CPU资源的执行向下

注:多线程本质上也是单线程程序,只是由于CPU切换很快很快,给我们的错觉就是两个任务同时进行。

线程的执行过程:

1.实例化一个线程对象并调用start()方法,线程进入就绪状态(可以去抢占CPU资源)。

2.当获取到CPU资源时,进入Running状态(执行状态)。

3.Running状态时,可能遇到其他情况(比如访问网络时没有资源),就如阻塞Blocked状态,当接触了阻塞是进入就绪状态。

4.当run()方法执行完毕后,该线程死亡Dead;

由以上线程运行推断出,线程的主要方法写在run()方法中,也称run()方法体为线程体。

例子分析:

测试类主函数:

package interThread_v001;

public class Test_v001

{

    public static void main(String args[])

    {

        // 实例化Thread对象

        Thread_v001 tv = new Thread_v001();

        // 启动线程 -->进入就绪状态

        tv.start();

        // tv.run();

        for (int i = 0; i < 100; i++)

        {

            System.out.println("mainThread-->" + i);

        }

    }

}

//线程类:(重写了run()方法)

package interThread_v001;

public class Thread_v001 extends Thread

{

    // 继承jdk提供的Thread类,重写run()方法

    public void run()

    {

        for(int i = 0; i < 100;i++)

        {

            System.out.println("Thread_v001-->" +i);

        }

    }

}

执行结果:

分析:由执行结果可以看出:其中两个循环是相互交叉执行(执行顺序不定)的,其中先实例化线程对象,并调用start()方法,进入就绪状态,并和主函数(for循环)抢占CPU,抢占到的先执行。

从中可以看出,线程的执行是混乱的,并且是不可控的。

注意:线程对象不能直接调用run()方法,如果直接调用,就是单线程了,不存在抢占的概念。

时间: 2024-11-13 21:35:06

java线程理解001的相关文章

java 线程理解

线程创建有两种方式: 1.实现runnable接口  2.继承thread 线程   都重写run方法 2.runnable接口优势: java 单继承但可以实现多个接口 runnable 方式可以实现多线程共享一个公用资源 3.线程的生命周期:见下图 4.那么sleep 和 wait 是什么? 用于暂停线程使其他线程获取CUP时间片进行执行 5.各自区别: sleep 是 thread 的方法   意义:等待多少毫秒后再唤醒且不会释放对象锁 wait 是object 方法 需要通过notify

java线程理解002

本章节主要是学习一种新的创建线程的方法,熟悉线程的常用方法,线程同步. 利用实现Runnable接口创建一个新的线程. 1 package interThread_v001; 2 3 public class Runable_v001 implements Runnable 4 5 { 6 // 线程体 7 8 public void run() 9 10 { 11 for(int i=0; i<100; i++) 12 { 13 14 System.out.println("Runnab

Java线程工作内存与主内存变量交换过程及volatile关键字理解

Java线程工作内存与主内存变量交换过程及volatile关键字理解 1. Java内存模型规定在多线程情况下,线程操作主内存变量,需要通过线程独有的工作内存拷贝主内存变量副本来进行.此处的所谓内存模型要区别于通常所说的虚拟机堆模型: 2. 线程独有的工作内存和进程内存(主内存)之间通过8中原子操作来实现,如下图所示: 原子操作的规则(部分): 1) read,load必须连续执行,但是不保证原子性. 2) store,write必须连续执行,但是不保证原子性. 3) 不能丢失变量最后一次ass

深入理解 Java 线程池

目录   一.简介  二.Executor 框架  三.ThreadPoolExecutor  四.Executors  参考资料 一.简介 什么是线程池 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务. 为什么要用线程池 如果并发请求数量很多,但每个线程执行的时间很短,就会出现频繁的创建和销毁线程.如此一来,会大大降低系统的效率,可能频繁创建和销毁线程的时间.资源开销要大于实际工作的所需. 正是由于这个问题,所以有必要引入线程池.使用 线程池的好处 有

java线程的理解

java thread类都是native方法实现的,所以没有用平台无关的方法实现,怎么实现的呢? 线程的实现: 第一种:使用内核线程实现. 内核线程就是直接使用操作系统内核支持的线程,由内核完成切换. 程序一般不会直接使用内核线程,而是使用内核线程的一种高级接口——轻量级进程,即通常意义上的线程.每个轻量级线程都要有一个内核线程支持,所以会消耗一定的内核资源. 而且因为是基于内核实现的,所以线程的操作需要系统调用,代价较高 2.用户线程 一般意义上来说只要不是内核线程都是用户线程,但是轻量级线程

由浅入深理解Java线程池及线程池的如何使用

前言 多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担.线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致Out of Memory.即便没有这样的情况,大量的线程回收也会给GC带来很大的压力. 为了避免重复的创建线程,线程池的出现可以让线程进行复用.通俗点讲,当有工作来,就会向线程池拿一个线程,当工作完成后,并不是直接关闭线程,而是将这个线程归还给线程池供其他任务使用. 接下来从总体到细致的方式,来共同探讨线程池. 总体的架构

Java线程池的底层实现与使用

前言 在我们进行开发的时候,为了充分利用系统资源,我们通常会进行多线程开发,实现起来非常简单,需要使用线程的时候就去创建一个线程(继承Thread类.实现Runnable接口.使用Callable和Future),但是这样也有一点问题,就是如果并发的线程数量很多,创建线程.销毁线程都是需要消耗时间.资源,这个时候线程池就派上用场了 一.四种线程池的介绍 Java通过Executors提供了四种线程池,分别是 1.newSingleThreadExecutor() 创建一个单线程化的线程池,它只会

java 线程详解

5月7号  周末看了一下线程方面的内容 ,边看视频边看书还附带着参考了很多人的博客,一天的收获,写下来整理一下:感觉收获还是挺多的:过段时间可能看完java  这几大块要去看一下关于spring boot  的内容顺便  也整理一下:附上我参考的 几本书: 关于java  线程,首先要了解一下线程和进程之间的关系.区别以及他们之间的概念: 首先是线程: 什么是线程? 线程是在程序执行过程中能够执行部分代码的一个执行单元,也看看做是一个轻量级的进程:线程是程序内的程序控制流只能使用程序内分配给程序

java线程详细介绍

目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1