多线程

来源:互联网 发布:网络视频广告表现形式 编辑:程序博客网 时间:2024/06/05 15:07

1)多线程 Thread

如何创建一个Thread

方式一:

1、定义一个类继承Thread并重写run方法,将要多线程运行的代码写在run方法中,run方法相当于一个存储器。

2、创建对象并用类名.start启用线程  (类名.start启用线程的作用:一是启动线程,二是调用run方法)

方式二:

1、定义类实现Runnable接口

2、覆盖run方法

3、通过Thread创建线程对象

4、将Runnable接口的子对象作为实际参数传递给Thread的函数

5、调用Thread的start方法开启线程并调用Runnable接口子类的run方法

这个方法的好处:避免了单继承的局限性,一般开发中建议用此方法。

多线程运行状态:

比如商场收银事例。多条队伍同时收银为多线程,还未轮到结账的人处于排队状态的在线程中叫临时等待状态,这时累了坐在旁边的椅子上(sleep()、wait()),叫做暂时放弃执行权,偷了东西被人抓了起来叫stop()


java对于多线程的安全问题提供了专业的解决方法:

1、同步代码块

synchronized(对象)

{需要被同步的代码}

2、同步函数

将synchronized作为修饰符放在函数上。

同步函数使用的锁是this

如果同步函数被静态static修饰,同步函数使用的锁不再是this,因为静态方法中是没有this的,而是这个同步函数所在类的字节码文件对象,即类名.class


懒汉式加锁

class SingleDome

{

private  SingleDome(){};

private static SingleDemo single = null;

public static SingleDemo getInstance()

{

if(single == null)

{

synchronized (SingleDemo.class)

{

if(single == null)

single = new SingleDemo ();

return

single;

}

}

}

}


死锁:同步函数 中 嵌套同步函数。


如果不同方法(多线程)操作同一个资源,同一个资源需要同步。如果一个方法先执行,执行后再执行另一个,需要加入等待唤醒机制(flag 。。对象.wait(),对象.notify() )





0 0
原创粉丝点击