暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Java多线程下

初始化 2021-07-11
162

线程的生命周期

线程安全问题

模拟多窗口卖票的程序中,会出现重票、票号错误的问题,导致该问题的原因是某个线程操作共用数据的过程中,其它线程也参与进来操作数据


解决线程安全问题

当一个线程,在操作共用数据时,其它线程不能参与进来,直到该线程数据操作完成,其它线程才能参与数据的操作


>方法一:使用关键字synchronized修饰同步代码块

锁:任何一个类的对象都可以充当锁(要求:多个线程共用同一把锁,即该对象唯一)

程序执行结果


>方法二:使用关键字synchronized修饰同步方法,同步方法的方法体只包含操作共享数据的代码块(不需要显示声明同步构造器)

>方法三:使用Lock锁(JDK5新增)

通过显示定义同步锁对象来实现同步,使用Lock对象充当,每次只允许一个线程对Lock对象加锁

程序执行结果


线程死锁问题

不同的线程分别占用对方需要的同步资源不释放,都在等待对方释放自己需要的同步资源,就形成了死锁问题

程序执行结果

注意:程序线程的死锁问题,执行时,并不会出现异常,但会出现线程的堵塞问题


JDK5新增的两种创建线程的方式

创建一个类实现Callable接口,实现接口中的call( )方法,call( )方法可以有返回值(支持泛型返回值),也可以抛出相应的异常

创建接口实现类的对象,FutureTask类实现了Runnable接口和Future接口,通过Thread开启线程


使用线程池,提高了响应速度,降低资源损耗

程序运行结果



实用青年




文章转载自初始化,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论