Java 多线程与并发【原理第二部分笔记】 什么是Java内存模型中的happens-before Java内存模型,即JMM,本身是一种抽象的概念,并不是真实存在的,他描述的是一组规则或者说是一种规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式JMM中的主内存 主内存主要存储的是Java的实例对象,其中还包括了类里面的成员变量,类信息,常量以及静态变量等等,其属于静态数据区,多线程并发操作...
1.要想了解多线程,必须先了解线程,而要想了解线程,必须先了解进程,因为线程是依赖于进程而存在。多线程 -- > 线程 --> 进程 2.什么是进程?通过任务管理器我们就看到了进程的存在。而通过观察,我们发现只有运行的程序才会出现进程。进程:就是正在运行的程序,是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源。 3.多进程有什么意义?单进程的计算机一次只能做一件事情,而我们现在的计算机都可...
Process 与 Thread 进程 : 执行程序的一次过程, 是一个动态的概念. 是系统资源分配的单位 线程 : 一个进程中可以包含若干个线程. 是CPU调度和执行的最小单位 核心概念线程就是独立的执行路径 在程序运行时, 即使自己没有创建线程, 后台也会有多个线程, 如主线程和 gc 线程等 main() 称之为主线程, 是系统的入口, 用于执行整个程序 在一个进程中, 如果开辟了多线程, 线程的运行由调度器安排调度, 调度器是与操作系统紧密相关的, 先后...
线程五大状态 新建 就绪 阻塞 运行 死亡 线程停止 package com.guanxing.state;//测试stop //1.建议线程正常停止--》利用次数,不建议死循环 //2.建议使用标志位--》设置一个标志位 //3.不要使用stop或destroy等过时的或JDK不建议使用的方法 public class TestStop implements Runnable{//1.定义一个标识符private boolean flag = true;@Overridepublic void run() {int i = 0;if (flag){System.out.println("run...Thread"+i++);}...
线程同步 并发:多个线程访问同一个对象,造成数据不安全 三个例子 package com.guanxing.syn;public class UnsafeTicket {public static void main(String[] args) {BuyTicket station = new BuyTicket();new Thread(station, "苦逼的我").start();new Thread(station, "牛逼的你").start();new Thread(station, "可恶的黄牛党").start();} }class BuyTicket extends Thread {//票private int ticketNums = 10;boolean flag = tru...
生产者&消费者 这是个线程同步问题, 生产者和消费者共享同一个资源, 并且两者之间互相依赖, 互为条件对于生产者, 没有生产产品之前, 要通知消费者等待. 生产了产品后, 又需要马上通知消费者消费 对于消费者, 在消费之后要通知生产者已经结束消费, 需要生产新的产品 仅有 syn 是不够的syn 可阻止并发更新同一个共享资源, 实现同步 syn 不能用来实现不同线程之间的消息传递方法wait() 表示线程一直等待, 直到其他线程通知, 与sle...
摘自:平凡希 一、wait()、notify()、notifyAll()等方法介绍 在Object.java中,定义了wait(), notify()和notifyAll()等接口。wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。而notify()和notifyAll()的作用,则是唤醒当前对象上的等待线程;notify()是唤醒单个线程,而notifyAll()是唤醒所有的线程。 Object类中关于等待/唤醒的API详细信息如下:notify() -- 唤醒在此对象监视器...
import org.apache.commons.collections.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service;import java.util.ArrayList; import java.util.List; import java.util.concurrent.*;/*** 以下是伪代码,要根据自己的实际逻辑进行整合*/ @Service public class PushProcessServiceImpl implements PushProcessService {private final static Logger logger ...
线程的状态1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。3. 阻塞(BLOCKED):...
1. 线程简介 程序:静态概念,是指令和数据的有序集合。 进程:动态概念,执行程序的一次执行过程,是系统资源分配的单位。 线程:独立的执行路径,每一个线程都有自己的局部变量表、程序计数器(指向正在执行的指令指针)以及各自的生命周期。 一个进程Process至少有一个线程Thread,线程是CPU调度和执行的单位。线程运行由调度器安排调度,调度器与操作系统紧密相关,先后顺序不能人为干预。在程序运行时,即使没有自己创建线程,...
JAVA多线程程序进程线程多线程并发main()主线程 创建线程继承Thread单继承局限性实现Runnable接口避免单继承局限性, 灵活 方便同一个对象被多个线程调用实现Callable接口package com.cyz.demo01;?public class TestThread1 extends Thread {? @Override public void run() { //run方法线程体 for (int i = 0; i < 20; i++) { System.out.println("我在看代码!"+i); } }? public stat...
线程的创建 三种创建方式:继承thread类,实现runnable接口,实现callable接口。 1,创建一个类,继承thread类,然后重写方法。在主方法中,new出这个类,然后调用start方法。 public class TestDemo1 extends Thread{ @Override public void run() { for (int i = 0; i < 20; i++) { System.out.println(i); } } public static void main(String[] args) { TestDemo1 te = new TestD...
java高级多线程(1)–实现java线程 多线程:一个程序同时执行多个任务的现象 有两个方法可以实现Java线程的定制: 1)通过继承Thread类来创建。 2)通过实现Runnable接口,并通过Thread类和实现Runnable接口的类来建立线程。 *继承Thread类 start()run()sleep()interrupt()吵醒getName() 返回线程名字isAlive() 返回线程状态currentThread() 正在运行的资源* 实现龟兔赛跑一起跑 通过继承Thread类来创建。 class Animal extends...
之前我们使用了继承Thread类来实现多线程 这次我们使用实现Runnable接口来实现多线程 基本代码差不多,具体的不同可以和之前Thread文章代码进行对比 //创建线程方式2:实现runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,调用start方法 public class TestThread3 implements Runnable{@Overridepublic void run() {//run方法线程体for (int i = 0; i < 30; i++) {System.out.println("this is run thread===="+i...
Java多线程 线程简介 多任务 现实中太多这样同时做多件事情的例子,看起来是多个任务都在做, 其实本质上我们的大脑在同一时间依旧只做了一件事情 程序、进程、线程 在操作系统中运行的程序就是进程,比如 QQ、播放器,游戏等 一个进程可以有多个线程,如视频中同时听声音,看图像、弹幕等 进程 进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程...