您的位置:首页 > 编程语言 > Java开发

JAVA基础 day11 多线程 同步代码块 死锁问题

2016-09-22 16:26 253 查看
进程(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