java多线程basic

可参考的博客:

https://www.cnblogs.com/wxd0108/p/5479442.html

1.多线程

进程的概述:正在运行的应用程序就是一个进程,线程是依赖于进程。
线程的概述:每一个应用程序中可以有多个任务,那么每一个任务就是一个线程。

多进程的系统的意义:提高了CPU的使用率
多线程的意义:提高了应用程序的使用率

CPU在不同的线程之间进行快速的切换,线程的执行具有随机性。
 

2.多线程的实现方式

a.继承Thread类
1.写一个类继承自Thread
2.重写run方法,(run方法中是子线程需要执行的代码)
3.创建该类的对象
4.开启线程  start()

b.实现Runnable接口
1.写一个类实现Runnable接口
2.实现Runnable接口中run方法,(run方法中是子线程需要执行的代码)
3.创建该类的对象
4.创建Thread对象,将上一步的对象作为构造方法参数传递进来
5.开启线程 start()

3.线程中的常见的方法

a.setName(String name); 设置线程的名称
b.String getName() ; 获取线程的名称
c.static Thread currentThread();  Thread.currentThread();  获取当前运行的线程
d.static void sleep(long mills) ; 让当前线程休眠多少毫秒
e.stop() 

4.线程的调度

a.分时调度模型(mac)
b.抢占式调度模型
多个线程同时去抢占CPU的执行权,谁抢占到了,那么CPU就执行谁。

5.多线程的数据安全问题

如何去判断会出现数据的安全问题:
1.是否是多线程环境
2.是否有共享的数据
3.是否有多条语句共同操作共享的数据

如何解决的?
使用同步代码块
格式:
synchronized(锁对象) {
需要同步的代码;
}
注意事项:多个线程的锁对象必须要是同一个对象。

同步代码块的作用:如果一段代码被同步代码块括起来,那么当一个线程在执行这么一部分代码的时候
其余线程不能进来执行,只有等到当前的线程执行完毕这么一部分代码以后,其余的线程才有可能去执行
这么一部分代码。

同步方法:如果一个方法中所有的代码都被同步代码块括起来,我们可以将这个方法声明成一个同步方法。
就是在方法的声明上加上一个synchronized关键字。

注意事项:1.同步方法,锁对象是this
  2.静态的同步方法,锁对象是当前类的字节码文件对象

6.学习过的线程安全的类

StringBuffer   Vector   Hashtable
Collections.synchronizedXXX(XXX): 将一个线程不安全的集合转换成一个线程安全的集合

 

实现多线程的两种方式

 

线程的运行的流程图

死锁的理解

线程出现的安全问题

 

 

 

 

posted @ 2022-12-07 18:38  diligently  阅读(23)  评论(0)    收藏  举报