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

面试题 相关文章推荐
面向对象编程OOP的优点
Jan 22 面试题
JRE、JDK、JVM之间的关系怎样
May 16 面试题
在C语言中实现抽象数据类型什么方法最好
Jun 26 面试题
我能否用void** 指针作为参数, 使函数按引用接受一般指针
Feb 16 面试题
static全局变量与普通的全局变量有什么区别
May 27 面试题
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
Feb 09 面试题
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
May 18 面试题
SQL面试题
Dec 09 面试题
利达恒信公司.NET笔试题面试题
Mar 05 面试题
2019年分享net面试的经历和题目
Aug 07 面试题
在c#中using和new这两个关键字有什么意义
May 19 面试题
简单的JAVA编程面试题
Mar 19 面试题
怎样在 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
php中var_export与var_dump的区别分析
2010/08/21 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
smarty获得当前url的方法分享
2014/02/14 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
php通过执行CutyCapt命令实现网页截图的方法
2016/09/30 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
一个网马的tips实现分析
2010/11/28 Javascript
dojo学习第二天 ajax异步请求之绑定列表
2011/08/29 Javascript
在myeclipse中如何加入jquery代码提示功能
2014/06/03 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
JS常用函数和常用技巧小结
2016/10/15 Javascript
Node.js  REPL (交互式解释器)实例详解
2017/08/06 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
[10:49]2014国际邀请赛 叨叨刀塔第二期为真正的电竞喝彩
2014/07/21 DOTA
python实现bitmap数据结构详解
2014/02/17 Python
python2.7的编码问题与解决方法
2016/10/04 Python
tensorflow实现对图片的读取的示例代码
2018/02/12 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
python进程间通信Queue工作过程详解
2019/11/01 Python
python的reverse函数翻转结果为None的问题
2020/05/11 Python
python requests库的使用
2021/01/06 Python
戴森美国官网:Dyson美国
2016/09/11 全球购物
Forever 21美国官网:美国标志性快时尚品牌
2017/02/20 全球购物
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
党员学习群众路线教育实践活动对照检查材料
2014/09/23 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
办公经费申请报告
2015/05/15 职场文书
运动会广播稿300字
2015/08/19 职场文书
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers