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

面试题 相关文章推荐
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
Sep 09 面试题
纬创Java面试题笔试题
Oct 02 面试题
介绍Java的内部类
Oct 27 面试题
Linux常见面试题
Oct 04 面试题
Linux不知道文件后缀名怎么判断文件类型
Aug 21 面试题
what is the difference between ext2 and ext3
Aug 25 面试题
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
Jun 27 面试题
AJAX的优缺点都有什么
Aug 18 面试题
什么是Web Service?
Jul 25 面试题
AssertionError 跟一下那个类是 “is – a”的关系
Feb 21 面试题
Hibernate持久层技术
Dec 16 面试题
程序员经常用到的UNIX命令
Apr 13 面试题
怎样在 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上传图片并压缩的实现方法
2015/12/22 PHP
php进程间通讯实例分析
2016/07/11 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
jQuery中parentsUntil()方法用法实例
2015/01/07 Javascript
javascript实现数独解法
2015/03/14 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
js将滚动条滚动到指定位置的简单实现方法
2016/06/25 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
Python实现配置文件备份的方法
2015/07/30 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
使用matplotlib画散点图的方法
2018/05/25 Python
python3实现磁盘空间监控
2018/06/21 Python
python实现flappy bird小游戏
2018/12/24 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
详解python 爬取12306验证码
2019/05/10 Python
Python Tkinter Entry和Text的添加与使用详解
2020/03/04 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
网站开发实习生的自我评价
2013/12/11 职场文书
行政专员的岗位职责
2014/03/10 职场文书
中学生寄语大全
2014/04/03 职场文书
长江七号观后感
2015/06/11 职场文书
学校运动会通讯稿
2015/07/18 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
php中配置文件保存修改操作 如config.php文件的读取修改等操作
2021/05/12 PHP
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers