JAVA基础 day11 多线程 同步代码块 死锁问题
来源:互联网 发布:oa源码 java 编辑:程序博客网 时间:2024/06/06 03:56
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。
线程 是进程中的一个独立控制单元。线程控制着进程的执行。
当一个程序启动时,就有一个进程被操作系统(OS)创建,与此同时一个线程也立刻运行,该线程通常叫做程序的主线程。
创建新执行线程有两种方法。
一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。
class Demo extends Thread
{
public void run(){
System.out.println(“run”);
}
}
然后实例化线程,通过start方法创建并执行线程,start执行线程中的run方法。
Demo d=new Demo();
d.start();
线程的五种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态。
getName();获取线程的名字。
currentThread();获取当前线程对象 Thread.currentThread();
售票程序:当多个线程共享一个数据时,可以把数据定为static。(一般不使用)
创建线程的第二种方式:
定义类实现Runnable接口,覆盖run()方法。
通过Thread类创建线程,然后传入Runnable子类的对象,通过start()开启线程。
class Test implements Runnable
{
public void run()
{
}
}
main方法中创建并开启线程。
Test t=new Test();
Thread t1=new Thread(t);
t1.start();
可以通过这种创建方法,多创建几个线程,共同使用一个对象,例子:售票系统。
使用Runnable接口可以实现多个接口,而继承Thread只能单继承。
多线程的安全问题
当一个线程执行某个代码块时,还未执行完,此时另一个线程进来,就可能引发安全问题。
解决方法:在一个线程执行过程中,其他线程不能执行此代码块。
java为解决这个问题,提出同步代码块。
synchronized(对象)
{
需要被同步的代码。
}
对象可以为任意对象,一般创建一个 object类的对象。
对象如同一个锁,当线程拥有锁时才可以进去执行,否则就算拥有cpu执行权,也无法执行同步代码块的内容。
多线程安全性解决的同时,程序速度会变慢,因为消耗了资源。
把synchronized作为修饰符 修饰函数,说明这个函数为同步函数。
函数都需要被对象调用,通过this函数被引用。
所以同步函数的锁是this。
静态的同步函数的锁是该函数所在类的class文件,也就是类名.class。
写同步程序时尽量避免死锁现象。
- JAVA基础 day11 多线程 同步代码块 死锁问题
- Java多线程线程、同步代码块、同步函数、死锁
- java 多线程学习笔记2-同步代码块,死锁
- Java 多线程同步、死锁问题
- day11多线程,run方法。卖票多线程示例。synchronized,同步锁对象,回顾单例。死锁问题
- java语言基础(90)——多线程(同步代码块解决多线程售电影票时的负票问题)
- 多线程基础之同步代码块
- 多线程同步死锁问题
- java多线程五:同步代码块
- Java多线程 3 同步代码块
- Java---13---多线程---synchronized 同步代码块
- Java多线程编程-同步代码块
- Java基础11天 学习笔记_多线程(两种实现,多进程中的安全,同步代码同步函数,死锁问题。)
- java多线程同步死锁
- 多线程 同步代码块
- 多线程、同步代码块
- 多线程-同步代码块
- Java_基础—多线程(同步代码块和同步方法)
- tp common模块在Thinkphp里面的作用
- 常用的数据源配置
- Codeforces 493C. Vasya and Basketball【暴力+二分】
- Windows 安装 mysql5.6
- 即插即用demo系列——文本相似度比较
- JAVA基础 day11 多线程 同步代码块 死锁问题
- css优化、提高性能的方法
- CSS外边距叠加的问题
- Android系统篇之—-Binder机制和远程服务调用机制分析
- ie9下checkbox无法二次全选
- ClipboardManager Hook总结
- windows + caffe + 配置python接口
- js常用方法
- ios基础--内存案例