
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java线程的概念与应用是大多数Java编程开发程序员都需要熟练掌握的一个编程开发知识点,而本文我们就通过案例分析来简单了解一下,Java编程线程问题解决方法都有哪些。
Java线程模型的根本问题是它完全不是面向对象的。面向对象(OO)设计人员根本不按线程角度考虑问题;他们考虑的是同步信息异步信息(同步信息被立即处理--直到信息处理完成才返回消息句柄;异步信息收到后将在后台处理一段时间--而早在信息处理结束前就返回消息句柄)。Java编程语言中的Toolkit.getImage()方法就是异步信息的一个好例子。getImage()的消息句柄将被立即返回,而不必等到整个图像被后台线程取回。
这是面向对象(OO)的处理方法。但是,如前所述,Java的线程模型是非面向对象的。一个Java编程语言线程实际上只是一个run()过程,它调用了其它的过程。在这里就根本没有对象、异步或同步信息以及其它概念。
在一个active对象上运行的异步信息实际上是同步的,因为它们被一个单一的服务线程按顺序从队列中取出并执行。因此,使用一个active对象以一种更为过程化的模型可以消除大多数的同步问题。
在某种意义上,Java编程语言的整个Swing/AWT子系统是一个active对象。向一个Swing队列传送一条讯息的安全的途径是,调用一个类似SwingUtilities.invokeLater()的方法,这样就在Swing事件队列上发送了一个runnable对象,当轮到它执行时,Swing事件处理线程将会处理它。
异步方法并没有指定返回值,因为其句柄将被立即返回,而不用等到请求的操作处理完成后。所以,此时没有合理的返回值。对于派生出的模型,$task关键字和class一样同效:$task可以实现接口、继承类和继承的其它任务。标有asynchronous关键字的方法由$task在后台处理。其它的方法将同步运行,就像在类中一样。
$task关键字可以用一个可选的$error从句修饰(如上所示),它表明对任何无法被异步方法本身捕捉的异常将有一个缺省的处理程序。我使用$来代表被抛出的异常对象。如果没有指定$error从句,就将打印出一个合理的出错信息(很可能是堆栈跟踪信息)。
注意,为确保线程安全,异步方法的参数必须是不变(immutable)的。运行时系统应通过相关语义来保证这种不变性(简单的复制通常是不够的)。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。