4.1学习内容

程序、进程和线程

1.程序Program:是一段静态的代码,它是应用程序执行的蓝本。

2.进程Process:是指一种正在运行的程序,有自己的地址空间

3.进程的特点:动态性、并发性、独立性

4,.并发和并行:

共同点:宏观上都是多个程序同时运行

不同点:微观上并发是一个一个执行

      微观上并行还是同时执行

5.线程:进程内部的一个执行单元,它是程序中一个单一的顺序控制流程

      线程又被称为轻量级进程

如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为多线

6.线程特点:轻量级进程、独立调度的基本单位、可并发执行、共享进程资源

7.线程和进程的区别:

最主要区别:进程是作为资源分配的单位、线程是调度和执行的单位,线程组只能共享资源

线程类1

1.如何定义线程类

public class RabbitThread extends Thread{

public void run(){

//线程体  线程要做的事情  完成的功能

}
}

2. 如何创建线程对戏那个

Thread rt = new RabbitThread();

3.如何启动线程

//rt.run(); //不是启动线程,是调用方法

rt.start(); //启动线程,线程排队,轮到cpu执行时执行run(),时间片结束,让出                        cpu,cpu会执行下一个线程

4.线程的方法

run()   线程体

start()   启动线程

Thread.cuttrenThread()   得到当前线程

getName()   获取线程name

setName("兔子线程")

5.之前的程序都是单线程,线程名称默认main

没创建一个线程,默认的名称 Thread-0   Thread-1   Thread-2

线程类2----定义线程的第二种方式

1.如何定义线程类

public class RabbitRunnable implements Runnable {

public void run(){

}

}

2.如何创建线程对象

Runnable rr = new RabbitRunnable();

Thread rt = new Thread(rr);

3.如何启动线程

rt.start();

4.两种定义线程方式的优缺点

方式1:extends Thread

    代码简单

    不能再继承其他类

方式2:implements Runnable

    代码繁琐些

    可以继承其他类

5.注意:一个线程只能启动一次(start())

线程类3

1.优先级的级别

public final static int MIN_PRIORITY = 1;

public final static int NORM_PRIORITY = 5;

public final static int MAX_PRIORITY = 10;

级别高意味着获取的CPU的概率高,级别低也不意味着没有执行的机会

2.守护线程

使用情况较少,但并非无用,距离来说,JVM的垃圾回收、内存管理等线程都是守护线程。

还有就是在做数据库应用的时候,使用的数据库连接池。

连接池本身也包含着很多后台线程,监控丽娜姐个数、超过时间、状态等等。


守护线程通常用于执行一些后台作业,例如在你的应用程序运行时播放背景音乐,在文字编辑器里做自动语法检查、自动保存等功能。

Java的垃圾hi手也是一个守护线程,守护线程的好处就是你不需要关心它的结束问题。

例如在你的应用程序运行的时候希望播放背景音乐,如果将这个播放背景音乐的线程设定为非守护线程,那么在用户请求退出的时候,不仅要退出主线程,还要通知 播放背景音乐的线程退出;如果设定为守护线程就不需要了。


同步监视器

1.实现线程同步有两种方式

1.同步代码块synchronized(account){.....}

2.同步方法

3.新版本中增加Lock

2.同步监视器的作用和要求

synchronized(同步监视器){


}

作用相当于一把锁

要求

1.只能是引用数据类型,不能是基本数据类型

2.可以改变引用类型的值,但是不能改变引用类型的引用

3.最好不要使用String和Integer,如果使用,不要改变其值

4.一般使用共享资源做同步监视器即可

5.也可以创建一个没有任何意义的对象专门做锁

3.同步代码块的执行过程

1.第一个线程要进入同步代码块,先看同步监视器(锁)的状态,肯定是open,置为close状态,执行其汇总的代码

2.第二个线程要进入同步代码块,先看同步监视器(锁)的状态,如果是close,无法访问,进入阻塞状态

3.第一个线程知心代码块过程中进行了线程切换(sleep),让出了CPU,但是锁还是close

4.第一个线程再次获取CPU,执行代码完毕,将同步监视器置为open状态

5.第二个线程再次要进入同步代码块先看同步监视器(锁)的状态,如果是open,重复之前的步骤即可

强调1:同步代码块作用:其中的代码时一个整体,必须让一个线程从头到尾执行完毕,其他线程才有机会

强调2:同步代码块中可以出席爱你线程切换,但是保证其他线程无法进入该代码,知道代码被当前线程执行完毕。

生活案例:火车的卫生间  加锁

4.优缺点

优点:安全

缺点:性能下降

同步代码块是串行的,而不是并行的

可能导致死锁

死锁:

含义:是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下 去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

四个必要条件:

互斥条件、请求和保持条件、不剥夺条件、环路等待条件。

四个条件必须同时触发,才会产生死锁。

5.其他

1.一个同步监视器close后,会锁定所有使用该同步监视器的代码块,其他线程不能进入任何一个使用该同步监视器的代码块。直到open为止。

2.一个同步监视器close后,会锁定所有使用该同步监视器的代码块,但是不会锁定使用其他同步监视器的代码块,其他线程可以访问,如果是open。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值