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。

写同步程序时尽量避免死锁现象。

1 0
原创粉丝点击