JAVA基础——线程

1.单线程和多线程

单线程:.一个程序 只有一条线程(主线程main)

多线程:一个程序 除了一条主线程main 以外 还拥有很多的子线程

  1. 效率高
  2. 开销少
  3. 容易调度(启用)(CPU直接调度)
  4. 高并发性

2.线程和进程

线程:.程序运行中的一条执行路径,是组成进程(程序)的  一个进程 必须拥有一条线程(主线程(main))

  1. 线程不能离开进程而独活
  2. 系统不为线程分配资源
  3. 多个线程共享进程的资源

进程:操作系统上运行的一个程度(可以简单的理解成一个程序)

  1. 进程是程序运行的基本单位(一个程序 必须拥有一个进程(可以拥有多个))
  2. 进程拥有独立的系统资源(系统为为其主动的分配资源 : cpu 磁盘……)

3.线程和进程的关系

进程:进程是线程的容器,一个进程可以拥有多个线程

线程:线程是进程的实体,一个线程必须拥有一个父进程

  • 系统会把资源分配给进程 同一个进程中的所有线程 共享次资源

4.线程和进程区别

1.进程拥有系统资源;线程不拥有系统资源,它和其他线程共享所在进程的资源

2.进程拥有独立的数据空间;线程直接共享相同的数据空间

所以:

  1. 进程可以独立进行,线程必须在进行中运行
  2. 进程的创建、撤销、和切换,其系统开销要比线程大
  3. 线程之间通信要比进程之间通信要简单

5.并发和并行

并发:多个线程 更具CPU的调度情况 执行

并行:多个线程 同时执行

6.线程的创建

方法一:

继承Thread类

  1. 创建一个类继承Thread类
  2. 覆写run方法(子线程做的事情 写在run方法中)
  3. 启动线程(调用start())

方法二:

实现Runnable接口

  1. 创建一个类实现Runnable接口
  2. 覆写run方法(子线程做的事情 写在run方法中)
  3. 启动线程(调用start())

注意:实现Runnable接口,只是拿到了run方法,通过这种方式创建的线程,不是一个真正的线程

7.线程的常用方法

currentThread():获取当前线程对象

sleep():休眠: 可以让线程睡一会
 yield():礼让   当前线程 主动放弃Cpu的资源 让其他线程去抢占 但是 放弃的时间不确定 有可能刚刚让出去 马上自己又抢回来
setPriority():设置优先级
                   优先级:1~10 10最高
                   默认是5;
 join():调用以后  等待代用的线程结束以后 再继续执行
isAlive(): 判断线程是否活着
interrupt():中断线程(并不是说调用以后线程就停止  该方法 仅仅知识修改了线程中断的标识)
默认的中断标识:false

线程被中断: 中断标识改为true

8.线程的生命周期

线程的生命周期:从线程的创建到线程的结束

9.同步

synchronized:同步锁,保证资源,同一时间,只能被同一条线程访问

原文地址:https://www.cnblogs.com/huan-guo/p/8550677.html

时间: 2024-08-03 21:25:33

JAVA基础——线程的相关文章

Java基础——线程总结

Java基础--线程总结 一.线程是什么? 线程:一个程序里不同的执行路径. 二.如何创建线程? 两种方法创建线程: 第一种 (1)定义具体功能类实现Runnable接口,可以多次调用而实现数据共享 (2)Thread myThread = new Thread(-)          //参数为Runnable接口类型 (3)Runnable中只有一个方法 public void run(){--} //用以定义线程运行体 第二种 (1)定义一个Thread的子类并重写run()方法 clas

java基础--线程并发

线程的使用方法: public static void main(String[] args) {     Runnable r = ()->{         while (true) {             System.out.println("this is thread");         }     };     Thread t = new Thread(r);     t.start();     while (true) {         System.

Java基础-线程

/** * 程序是静态的数据 进程是动态的程序 线程是进程中的一个连续的控制流 * 程序:Code+Data * 进程:程序+CPU * 线程:创建+就绪+运行+阻塞+销毁 * * 2种生成线程类的方法 * 继承:java.lang.Thread+对象.start(); * 实现:java.lang.Runnable+借助Thread类对象.start(); * 2种方式都要重写run() * * 常用方法 * sleep(long time); * 主动休眠 yield(); * 主动让出CP

java基础——线程同步块

实现Runnable的线程同步块 package synchronization.block; /* @author zsben @create 2020-01-03 13:48 创建三个窗口卖票,使用Runnable接口方式 1.问题:卖票过程中出现了重票,错票-->出现了线程安全问题 2.解决方案:当一个线程在操作ticket时,其他线程不能参与进来(即使该线程被阻塞) 直到该线程操作完ticket,其他线程才可以参与进来, 3.java中通过同步机制进行解决 方式一:同步代码块 synch

java基础——线程通信机制,生产者消费者

package communication; /* 使用两个线程1,2交替打印1-100 线程通信方法: 1.wait():一旦执行此方法,当前线程进入阻塞态,并释放锁 2.notify():会唤醒被wait的一个线程,如果有多个线程wait,则唤醒优先级高的 3.notifyAll():唤醒所有被wait的线程 说明: 1.wait(),notify(),notifyAll()使用在同步代码块或同步方法中,不能用在lock方法中 2.这三个方法的调用者必须是同步代码块或同步方法中的锁对象(同步

java基础——线程池

package threadpool; /* 创建线程的方式四:使用线程池 1.提供指定线程数量的线程池 2.执行指定的线程的操作,需要实现Runnable接口或Callable接口实现类的对象 3.关闭连接池 好处: 1.提高响应速度,减少了创建线程的时间 2.降低资源消耗(重复利用线程池中线程,不需要每次都创建) 3.便于线程管理,设置线程池 @author zsben @create 2020-01-05 17:05 */ import java.util.concurrent.Execu

Java基础—线程

1.什么叫线程 进程:进行中的程序 线程:轻量级的进程:程序里的顺序控制流,可以理解为程序里不同的执行路径   线程体为run()方法(直接调用run()视为普通方法),启动线程为start()方法 2.线程的五种状态  创建:两种方式 继承Thread类,重写run()方法:实现Runnable接口,实现run()方法 就绪:调用Thread的start()方法(第二种实现接口方式使用静态代理) 运行:得到时间片,开始运行 阻塞:遇到阻塞事件 终止:线程死亡,严禁使用stop()方法,而应该定

不惑JAVA之JAVA基础 - 线程池

简单原理 一个比较简单的线程池至少应包含线程池管理器.工作线程.任务队列.任务接口等部分. 线程池管理器(ThreadPool Manager)的作用是创建.销毁并管理线程池,将工作线程放入线程池中: 工作线程是一个可以循环执行任务的线程,在没有任务时进行等待: 任务队列的作用是提供一种缓冲机制,将没有处理的任务放在任务队列中: 任务接口是每个任务必须实现的接口,主要用来规定任务的入口.任务执行完后的收尾工作.任务的执行状态等,工作线程通过该接口调度任务的执行. 线程池的优点 降低资源消耗,通过

java基础——线程安全的单例模式懒汉式

package savesingleton; /* 使用同步将单例模式中的懒汉式改写成线程安全的 @author zsben @create 2020-01-03 22:22 */ class Bank{ private Bank(){} private static Bank instance = null; /*public static synchronized Bank getInstance(){ if(instance == null){ instance = new Bank();