Java基础—线程

1.什么叫线程

  进程:进行中的程序

  线程:轻量级的进程;程序里的顺序控制流,可以理解为程序里不同的执行路径

       线程体为run()方法(直接调用run()视为普通方法),启动线程为start()方法

2.线程的五种状态

   创建:两种方式 继承Thread类,重写run()方法;实现Runnable接口,实现run()方法

  就绪:调用Thread的start()方法(第二种实现接口方式使用静态代理)

  运行:得到时间片,开始运行

  阻塞:遇到阻塞事件

  终止:线程死亡,严禁使用stop()方法,而应该定义一个boolean flag,并在run()方法中判断标志进行合理结束run()方法进而结束线程。

3.线程常用方法

  Thread.sleep():线程睡眠,参数为当前线程的睡眠毫秒数。(静态方法)。抱着锁睡觉

  join():线程合并,将当前线程与该线程合并,等待该线程终止

  yield():线程让步,让出CPU

  wait():线程等待,当前线程进入wait pool 线程等待池。放弃锁等待

  notify()/notifyAll():线程唤醒,唤醒等待池中的一个/所有线程

4.线程同步

  对象互斥锁:synchronized(obj) 保证同一时刻只能有一个线程访问该对象,从而保证了共享数据的操作完整性。

  同步一般分为两类(注意死锁问题):

      同步方法

        public synchronized void fun1(){}

      同步块

        synchronized(this){}

  解决线程死锁的问题最好只锁定一个对象,不要同时锁定两个对象

经典的生产者消费者模型

时间: 2024-10-12 16:22:21

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之JAVA基础 - 线程池

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

JAVA基础——线程

1.单线程和多线程 单线程:.一个程序 只有一条线程(主线程main) 多线程:一个程序 除了一条主线程main 以外 还拥有很多的子线程 效率高 开销少 容易调度(启用)(CPU直接调度) 高并发性 2.线程和进程 线程:.程序运行中的一条执行路径,是组成进程(程序)的  一个进程 必须拥有一条线程(主线程(main)) 线程不能离开进程而独活 系统不为线程分配资源 多个线程共享进程的资源 进程:操作系统上运行的一个程度(可以简单的理解成一个程序) 进程是程序运行的基本单位(一个程序 必须拥有

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();