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...

面试题 相关文章推荐
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
Feb 08 面试题
南京迈特望C/C++面试题
Jul 09 面试题
C++:memset ,memcpy和strcpy的根本区别
Apr 27 面试题
编写函数,将一个3*3矩阵转置
Oct 09 面试题
链表面试题-一个链表的结点结构
May 04 面试题
SQL Server 2000数据库的文件有哪些,分别进行描述
Mar 30 面试题
如何用SQL语句进行模糊查找
Sep 25 面试题
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
Jul 27 面试题
什么是跨站脚本攻击
Dec 11 面试题
某公司部分笔试题
Nov 05 面试题
AJAX的优缺点都有什么
Aug 18 面试题
ruby如何进行集成操作?Ruby能进行多重继承吗?
Oct 16 面试题
怎样在 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
星际RPG字典
2020/03/04 星际争霸
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
JavaScript修改css样式style
2008/04/15 Javascript
ext 同步和异步示例代码
2009/09/18 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
VUE v-for循环中每个item节点动态绑定不同函数的实例
2018/09/26 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
python抓取最新博客内容并生成Rss
2015/05/17 Python
python常用知识梳理(必看篇)
2017/03/23 Python
Python实现导出数据生成excel报表的方法示例
2017/07/12 Python
python 生成器协程运算实例
2017/09/04 Python
TensorFlow实现Batch Normalization
2018/03/08 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
python numpy库linspace相同间隔采样的实现
2020/02/25 Python
opencv 图像轮廓的实现示例
2020/07/08 Python
如何定义一个可复用的服务
2014/09/30 面试题
主持人演讲稿范文
2013/12/28 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
倡导文明标语
2014/06/16 职场文书
传播学专业毕业生自荐书
2014/07/01 职场文书
酒店餐厅2014重阳节活动策划方案
2014/09/16 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
工作证明英文模板
2014/10/21 职场文书
2015年农村党员公开承诺事项
2015/04/28 职场文书
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫