龙空技术网

java编程思想之多线程知识讲解,一篇就够了

互联网技术学堂 74

前言:

目前姐妹们对“java的多”大概比较关注,看官们都想要学习一些“java的多”的相关知识。那么小编在网上汇集了一些对于“java的多””的相关知识,希望各位老铁们能喜欢,兄弟们一起来了解一下吧!

创作不易,关注、点赞,分享,转发,评论,收藏

利用对象,可将一个程序分割成相互独立的区域。

“进程”是指一种“自包容”的运行程序,有自己的地址空间。

“多任务”操作系统能同时运行多个进程(程序)——但实际是由于CPU 分时机制的作用,使每个进程都能 循环获得自己的CPU 时间片。

Java程序的进程里有几个线程:主线程,垃圾回收线程(后台线程)等

进程与线程的基础区别

1、进程是资源分配的最小单位,线程是程序执行的最小单位

2、进程有自己的独立地址空间,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段。

线程是共享进程中的数据的,使用相同的地址空间。

3、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,

进程之间的通信需要以通信的方式(IPC)进行。

4、但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

从线程继承分析

创建一个线程,最简单的方法就是从Thread 类继承。Thread 最重要的方法是run()。

下面这个例子可创建任意数量的线程。

一个线程可以有四种状态新(New):线程对象已经创建,但未启动线程。可运行(Runnable):是指一旦时间分片机制对一个线程有空闲的CPU周期,那个线程就可以立即开始运行。死(Dead):一个线程从自己的run()方法返回后,已经“死”了。也可以调用stop()使其消亡。堵塞(Blocked):线程可以运行,但有东西在阻塞它。如果一个线程被阻塞,调度机制可以简单地跳过它,不给它分配任何CPU时间。除非线程再次进入“可运行”状态,否则不会采取任何操作。线程的生命周期线程为何会堵塞

(1) 调用sleep(毫秒数),使线程进入“睡眠”状态。在设定的时间内,这个线程是不会运行的。

(2) suspend()用于暂停线程的执行。除非线程收到resume()消息,否则它不会返回到“可运行”状态。

(3) 用wait()暂停了线程的执行。除非线程收到 nofify()或者notifyAll()消息,否则不会变成“可运行” (是的,这看起来同原因2 非常相象,但有一个明显的区别是我们马上要揭示的)。

(4) 线程正在等候一些 IO(输入输出)操作完成。

(5) 线程试图调用另一个对象的“同步”方法,但那个对象处于锁定状态,暂时无法使用。

睡眠

IO 堵塞

若一个数据流必须等候一些IO 活动,便会自动进入“堵塞”状态。在本例下面列出的部分中,有两个类协同 通用的 Reader 以及Writer 对象工作(使用Java 1.1 的流)。

线程冲突的原因

堆内存:进程公共区域,存储所有线程都可以看到的资源。

用synchronized修饰符来解决

在任务线程中增添一个静态属性object,并用synchronized对其上锁做到“监听器”的作用。

Java提供了解决线程之间通信问题的方法

解决多线程并发安全问题

解决多线程的并发安全问题,java无非就是加锁

(1)synchronized 是互斥锁;

(2)ReentrantLock 顾名思义 :可重入锁

(3)ReentrantReadWriteLock :读写锁

标签: #java的多 #多线程 静态变量