线程、线程安全、线程同步

线程、线程安全、线程同步

ID:34716920

大小:55.89 KB

页数:5页

时间:2019-03-10

线程、线程安全、线程同步_第1页
线程、线程安全、线程同步_第2页
线程、线程安全、线程同步_第3页
线程、线程安全、线程同步_第4页
线程、线程安全、线程同步_第5页
资源描述:

《线程、线程安全、线程同步》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、多线程总结进程:正在运行中的程序。线程:就是一个负责程序执行的控制单元(执行路径)。一个进程中可以有多条执行路径,称为多线程。一个进程中至少有一个线程。开启多个线程是为了同时运行多部分代码。每一个线程都有自己运行的内容。这个内容可以称为线程要执行的任务。多线程优点;解决了多部分代码同时运行的问题。多线程弊端:线程过多会影响效率其实应用程序的执行都是cpu在不停的快速的做着切换完成的,这个切换是随机的。JVM启动了多个线程,至少有两个线程可以分析出来。1.执行main函数的线程。该线程的任务代码都定义在main函数中

2、。2.负责垃圾回收的线程。创建线程的方法:方法一:继承Thread类步骤:{1.定义一个类继承Thread类。2.覆盖Thread类中的run方法。3.直接创建Thread类的子类对象创建线程。4.调用start()方法开启线程并调用线程的run方法执行。可以通过Thread的getName()方法获取当前正在执行的线程的编号Thread.currentThread().getName()}创建线程的目的是为了开启一条执行路径,去运行指定的代码和其他代码实现同时运行,运行的制定代码就是这个执行路径的任务,JVM创建

3、的主线程的任务都定义在了主函数中自定义线程的任务就是Thread子类中的run方法。run方法封装了自定义线程的任务也就是说run方法中定义的就是要运行的任务代码。开启线程是为了运行制定代码,所以只需要继承Thread类,并复写run方法。将运行的代码封装在run方法中即可。银行存款案例需求:储户两个,每个人都到银行存款,每人存三次,每次一百。代码体现:classBank{privateintsum;publicsynchronizedvoidset(intnum){for(inti=0;i<3;i++){sum+

4、=num;System.out.println(Thread.currentThread().getName()+"sum=......"+sum);}}}classPersonOneextendsThread{privateBankb=newBank();publicvoidrun(){b.set(100);}}publicstaticvoidmain(String[]args){Bankb=newBank();PersonOnepo=newPersonOne();Threadt1=newThread(po);T

5、hreadt2=newThread(po);t1.start();t2.start();}常见死锁之同步嵌套指的是同步函数中嵌套痛不代码块或者同步代码快中嵌套同步代码块。+++++++++++++++多线程下的单例模式:publicclassSingles{privateSingless=null;privateSingles(){}publicSinglesgetInstance(){if(s==null){synchronized(Singles.class){if(s==null)s=newSingles()

6、;}}returns;}}加入同步是为了解决线程安全问题。双重判断是为了解决效率问题。静态同步函数的锁:静态的同步函数实用的锁是该函数所属字节码文件对象。可以用getClass方法获取,也可以用当前类名.class表示同步函数&同步代码块的锁:同步函数实用的锁是this同步函数和同步代码块的区别:1.同步函数的锁是固定的this.2.同步代码块的锁是任意的对象。建议使用同步代码块。创建线程方法二:实现Runnable接口。1.定义类实现Runnable接口。2.覆盖接口的run方法,将线程的任务代码封装到run方法

7、中。3.通过Thread类创建对象,并将Runnable接口的子类对象作为Thread类的构造函数的参数进行传递,因为线程的任务都被封装在Runnab接口子类对象的run方法中,所以要在线程对象创建时就明确要运行的任务。4.调用线程对象的start方法来执行线程。实现Runnable接口的好处:1.将线程的任务从线程的子类中分离出来,进行了单独的封装。按照面向对象的思想将任务封装成对象2.避免了java继承的局限性。这种方法较第一种方法比较常用多线程案例之卖票线程安全问题产生的原因:1.多个线程在操作共享的数据。2

8、.操作共享数据的线程代码有多条。1.当一个线程在执行操作共享数据的多条代码过程中,其他线程被切换到并执行,就会导致线程安全问题的产生。解决思路:就是将多条操作共享数据的线程代码封装起来,当有线程在执行这些代码的时候,其他线程不可以参与运算。必须要当前线程把这些代码都执行完毕后,其他线程才可以参与运算,用同步代码块就可以解决这个问题。synchronized(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。