黑马程序员--多线程(二)

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!-------

多线程的安全问题

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

解决办法:对多条操作共享数据的语句只能让一个线程都执行完,在执行过程中其他线程不可以参与执行。具体做法是使用同步代码块:

synchronized(对象){

需要被同步的代码;

}

对象如同锁,持有锁的线程可以在同步中执行,没有锁的线程即使获取cpu的执行权也进不去,因为没有获取锁!

同步的前提:

1.必须有两个或两个以上的线程

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

3.必须保证同步中只能有一个线程

好处:解决了多线程的安全问题

弊端:多线程要判断锁,需要消耗资源,运行效率较慢

同步函数使用的锁是this,静态同步函数使用的锁是当前类的字节码,即:类名.class

延迟加载的单利设计模式:

class Singleton{

private static Singleton single = null;

private Singleton(){}

public static Singleton getInstance(){

if(s==null){

synchronized(Singelton.calss){

if(s==null){

s = new Singleton();

return s;

}

}

}

}

}

时间: 2024-10-05 19:34:32

黑马程序员--多线程(二)的相关文章

黑马程序员------多线程(二)

1.1 同步代码块:Java对多线程的安全问题提供了专业的解决方式 格式: synchronized(对象){ 需要被同步的代码(共享数据) } 对象如同锁.持有锁的线程可以在同步中执行.没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁. 火车上的卫生间---经典. 同步的前提:1,必须要有两个或者两个以上的线程.2,必须是多个线程使用同一个锁. 必须保证同步中只能有一个线程在运行. 好处:解决了多线程的安全问题. 弊端:多个线程需要判断锁,较为消耗资源 示例1: 1 class

黑马程序员—多线程

进程:一个正在执行的程序. 线程:就是进程中一个独立的控制单元,线程在控制进程的执行,一个进程中至少有 一个线程. 主线程:JVM启动的时候会有一个进程java.exe,该进程中至少有一个负责java程序的执行 而且这个线程运行的代码存在于main方法中,该线程称之位主线程. 创建线程的方式有两种: 方法一: 1.定义类继承Thread2.复写Thread类中的run方法 目的:将自定义代码存储在run方法中,让线程运行3.调用线程的start方法 该方法有两个作用:启动线程,调用run方法(存

【黑马】程序员————多线程(二)单例设计模式、线程间通信,JDK1.5互斥锁

------Java培训.Android培训.iOS培训..Net培训.期待与您交流!----- 一.单例设计模式 单例设计模式的意义: A.保证类在内存中只有一个对象,不提供外部访问方式,构造函数用private修饰. B.提供公共方法(static修饰,类的静态方法),获取类的实例.单例设计模式分为饿汉和懒汉两种模式. 饿汉式&懒汉式 class Test33 { public static void main(String[] args) { Fanjianan.getInstance()

黑马程序员 - 多线程

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 多线程进程:一个正在执行中的程序,每一个进行执行,都有一个执行顺序,该顺序就是一个执行路径,或者加一个执行单元线程:就是进程中的一个独立的执行路径,一个进程中至少有一个线程.java vm启动的时候会有一个进程java.exe.该进程中至少一个线程负责执行java程序的执行,而且这个线程运行的代码存在于main方法中.该线程称之为主线程.扩展:其中更细节说明java vm启动不止一个线程,还有

黑马程序员——多线程

一.概述 (一)进程 正在执行中的程序,每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. (二)线程 进程中的一个独立的控制单元.线程在控制着进程的执行.一个进程中至少有一个线程.只要进程中有一个线程在执行,进程就不会结束. (三)多线程 在java虚拟机启动的时候会有一个java.exe的执行程序,也就是一个进程.该进程中至少有一个线程负责java程序的执行.而且这个线程运行的代码存在于main方法中.该线程称之为主线程.JVM启动除了执行一个主线程,还有负责垃圾回收

黑马程序员----多线程基础

/*** @author Administrator** @description Java多线程编程入门测试类* @history*/// 方法一.继承线程类Threadclass MyThread extends Thread{public MyThread(String threadName){ // 设置当前线程的名称currentThread().setName(threadName);}public void run(){System.out.println(Thread.curre

黑马程序员——多线程总结

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 多线程和进程的区别? 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高. 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率. 线程在执行过程中与进程还是有区别的.每个独立的线程有一个程序运行的入口.顺序执行序列和程序的出口.但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程

黑马程序员------多线程(一)

1.1多线程的概念 1.1.1 进程.线程.多进程的概念进程:是一个正在执行中的程序. 每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程:就是进程中的一个独立的控制单元. 线程在控制着进程的执行. 一个进程中至少有一个线程. Java VM 启动的时候会有一个进程java.exe. 该进程中至少一个线程负责java程序的执行.而且这个线程运行的代码存在于main方法中.该线程称之为主线程. 扩展:其实更细节说明jvm,jvm启动不止一个线程,还有负责垃圾回收机制的

黑马程序员 03-第二个OC程序

———Java培训.Android培训.iOS培训..Net培训.期待与您交流! ——— 1.代码编写 以下是第二个OC程序: 1 #import <Foundation/Foundation.h> 2 3 int main() 4 { 5     //NSLog输出内容会自动换行 6 //NSL3个字母都是大写 7 //@和""之间不能有空格 8     NSLog(@"第2个OC程序!!!"); 9      10     return 0; 11