Java程序开发中如何应用线程


Posted in 面试题 onMarch 03, 2016
Java平台从开始就被设计成为多线程环境。在你的主程序执行的时候,其它作业如碎片收集和事件处理则是在后台进行的。

本质上,你可以认为这些作业是线程。它们正好是系统管理线程,但是无论如何,它们是线程。线程使你能够定义相互独立的作业,彼此之间互不干扰。系统将交换这些作业进或出cpu,这样(从外部看来)它们好象是同时运行的。

在你需要在你的程序中处理多个作业时,你也可以使用多个进程。这些进程可以是你自己创建的,你也可以操纵系统线程。你进行这些多作业处理,要使用几个不同的类或接口:

java.util.timer类

javax.swing.timer类

thread类

runnable接口

对于简单的作业,通常需要重复的,你可以使用java.util.timer类告诉它“每半秒钟做一次”。注意:大多数系统例程是使用毫秒的。半秒钟是500毫秒。

你希望timer实现的任务是在java.util.timertask实例中定义的,其中运行的方法包含要执行的任务。这些在hi类中进行了演示,其中字符串“hi”重复地被显示在屏幕上,直到你按enter键。

import java.util.*;

public class hi
{
public static void main
(string args);
timer.cancel();
}
}

java runtime environment工作的方式是只要有一个线程在运行,程序就不退出。这样,当取消被调用,没有其它线程在运行了,则程序退出。有一些系统线程在运 行,如碎片收集程序。这些系统线程也被称为后台线程。后台线程的存在不影响运行环境被关闭,只有非后台线程保证运行环境不被关闭。

javax.swing.timer 类与java.util.timer类的工作方式相似,但是有一些差别需要注意。第一,运行的作业被actionlistener接口的实现来定义。第 二,作业的执行是在事件处理线程内部进行的,而不象java.util.timer类是在它的外部。这是很重要的,因为它关系到swing组件集是如何设 计的。

如果你不熟悉swing,它是一组可以被java程序使用的图形组件。swing被设计程被称为单线程的。这意味着对swing类内部内容的访问必须在单个线程中完成。这个特定的线程是事件处理线程。

这样,例如你想改变label组件的文字,你不能仅仅调用jlabel的settext方法。相反,你必须确认settext调用发生在事件处理线程中,而这正是javax.swing.time类派的上用场的地方。

为了说明这第二种情况,下面的程序显示一个增加的计数器的值。美半秒钟计数器的数值增加,并且新的数值被显示:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class count
{
public static void
main(string args)
{
final string urlstring = args;
final string message = args;
thread thread1 = new thread()
{
public void run()
{
try
{
url url = new url(urlstring);
urlconnection connection =
url.openconnection();
inputstreamreader isr = new
inputstreamreader(
connection.getinputstream());
bufferedreader reader =
new bufferedreader(isr);
int count = 0;
while (reader.read() != -1)
{
count++;
}
system.out.println(“size is : ”
+ count);
reader.close();
} catch (malformedurlexception e)
{
system.err.println(“bad url: ”
+ urlstring);
} catch (ioexception e)
{
system.err.println
(“i/o problems”);
}
}
};
thread1.start();
runnable runnable = new runnable()
{
public void run()
{
while(true)
{
system.out.println(message);
try
{
thread.sleep(500);
} catch (interruptedexception e)
{
}
}
}
};
thread thread2 = new thread(runnable);
thread2.start();
try {
system.out.println
(“press enter to stop”);
system.in.read(new byte);
} catch (ioexception e)
{
system.out.println(“i/o problems”);
}
system.exit(0);
}
}

Tags in this post...

面试题 相关文章推荐
普天C++笔试题
Mar 20 面试题
杭州龙健科技笔试题.net部分笔试题
Jan 24 面试题
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
Sep 06 面试题
能否解释一下XSS cookie盗窃是什么意思
Jun 02 面试题
用C#语言写出在本地创建一个UDP接收端口的具体过程
Feb 22 面试题
进程的查看和调度分别使用什么命令
Mar 25 面试题
你所在的项目是如何确定版本号的
Dec 28 面试题
用Python写一个for循环的例子
Jul 19 面试题
介绍一下mysql的日期和时间函数
Mar 28 面试题
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
May 30 面试题
如何用Java实现列出某个目录下的所有子目录
Jul 20 面试题
final, finally, finalize的区别
Mar 01 面试题
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
Jun 20 #面试题
如何写一个Java类既可以用作applet也可以用作java应用
Jan 18 #面试题
继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
Nov 18 #面试题
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
Feb 17 #面试题
Java编程面试题
Apr 04 #面试题
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
Nov 09 #面试题
启动一个线程是用run()还是start()
Dec 25 #面试题
You might like
基于pear auth实现登录验证
2010/02/26 PHP
php中调用其他系统http接口的方法说明
2014/02/28 PHP
一个基于phpQuery的php通用采集类分享
2014/04/09 PHP
php的扩展写法总结
2019/05/14 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
js的表单操作 简单计算器
2011/12/29 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
2015/03/31 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
教你快速搭建Node.Js服务器的方法教程
2017/03/30 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
2017/09/18 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
2018/04/26 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
用Python写冒泡排序代码
2016/04/12 Python
AI人工智能 Python实现人机对话
2017/11/13 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
Python Selenium 之数据驱动测试的实现
2019/08/01 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
银行实习鉴定
2013/12/13 职场文书
公司门卫岗位职责
2014/03/15 职场文书
公司活动总结范文
2014/07/01 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
亮剑观后感300字
2015/06/05 职场文书
小学安全教育主题班会
2015/08/12 职场文书
防震减灾主题班会
2015/08/14 职场文书
合作合同协议书
2016/03/21 职场文书