当前位置:首页 > 开发 > 编程语言 > 多线程 > 正文

黑马程序员—java基础—多线程、单例设计模式

发表于: 2011-10-28   作者:baiqian   来源:转载   浏览次数:
摘要: ---------------------- android培训、java培训、期待与您交流! ----------------------     多线程:   创建一个线程的第一种方式:继承Thread类。 步骤: 1.定义类继承Thread. 2.重写Thread类中的run 方法。 3.调用线程的start 方法。 该方

---------------------- android培训java培训、期待与您交流! ----------------------

 

 

多线程:

 

创建一个线程的第一种方式:继承Thread类。

步骤:

1.定义类继承Thread.

2.重写Thread类中的run 方法。

3.调用线程的start 方法。

该方法有两个作用:启动线程,调用run 方法。

Thread类用于描述线程,

它定义了一个功能,用于存储线程要运行的代码。该存储功能就是run 方法。

创建一个线程的第二种方式:继承Runnable接口。

两种方法的区别:

继承Thread:线程代码存放在Thread子类的run方法中。

实现Runnable:线程代码存放在接口子类的run方法中。

多线程的安全问题:

当多条语句在操作同一线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完另一个线程参与进来执行。

解决方法:

对多条操作共享数据的语句,只能让一个线程都执行完,在执行过程中,其他线程不可以参与执行。

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

就是同步代码块

Synchronized(对象){

需要被同步的代码

}

火车上的卫生间——经典(同步锁)

同步的前提:

1、必须要有两个或者两个以上的线程。

2、必须是多个线程使用同一个锁。

必须保证同步中只能有一个线程在运行。

优点:解决了线程的安全问题

弊端:多个线程都需要判断锁,较消耗资源,

同步函数所使用的锁是this

同步函数被静态修饰后使用的锁是该方法所在类的字节码文件对象。类名.class

 

 

单例设计模式

懒汉式与饿汉式单例设计模式的不同:

 

懒汉式:

它的特点是实例的延迟加载,但是存在问题如果多线程访问时会出现安全问题,可以加同步来解决,加同步的方式:可以用同步代码块儿但稍微有些低效,用双重判断的方式可以解决效率问题,加同步的时候使用的锁是:该类所属的字节码文件对象。

饿汉式:

 

public  class Single {

 

//饿汉式

private static final Single single=new Single();

private Single(){}

public static synchronized Single getInstance(){

return single;

}

//懒汉式

private static Single single=null;

private Single(){}

public static  Single getInstance(){

if(single==null){

synchronized(Single.class){

if(single==null){

single=new Single();

}

}

}

return single;

}

}

死锁:同步中嵌套同步但锁不同。

当用线程写生产者消费者(多个生产者,多个消费者)时必须用while循环和notifalyAll();

 

JDK1.5中提供了(显示的锁机制及显示的锁对象上的等待唤醒操作机制)多线程升级解决方案。将同步synchronized替换成现实Lock操作。将Object 中的wait,notify ,notifyAll替换成了Condition对象,该对象可以Lock锁进行获取。它实现了本方只唤醒对方操作。(生产者消费者有什么替换方案?)

 

Stop方法已经过时,停止线程只有一种让run方法结束,开启多线程运行的代码通常是循环结构,只要控制住循环,就可以让run方法结束,即线程结束。

特殊情况:

当线程处于冻结状态,就不会读取到标记,那么线程就不会结束,当没有指定的方式让冻结的线程恢复到运行状态时,需要对冻结进行清除,强制让线程恢复到运行状态中来。这样就可以操作标记让线程结束。

Thread类提供该方法 interrupt();

Join:

A线程执行到了B线程的.join()方法时,A就会等待。等B线程都执行完,A才会执行,join可以用来临时加入线程执行!

 

 

---------------------- android培训java培训、期待与您交流! ----------------------

黑马程序员—java基础—多线程、单例设计模式

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
------- android培训、java培训、期待与您交流! ---------- 1. private关键字 <span style="lin
保证一个类在内存中的对象唯一性,需要以下三步: 1. 不允许其他模块用new创建该类对象。(即把该类
这个模式是非常有意思,并且比較简单,可是我还是要说由于它使用的是如此的广泛,如此的有人缘,单
java设计模式之——单例模式 1,什么是单例模式? 单例模式确保一个类只有一个实例,自行提供这个实
概念:   java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式
一、什么情况下考虑使用“单例模式”? 单例模式使得一个类在任何情况下只有一个对象,通常当需要一
概念:   java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式
在很久之前,也就是在大二暑假的时候,那时候看马士兵的视频教程中有提到很多的设计模式。 java的设
多线程之 单例设计模式 饿汉式 多线程安全代码: 代码1: /** * 饿汉式 * */ class Single { private
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- ------Java培训、Androi
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号