动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.sup 方法.
.java报表EXCEL解决方案.
.高效处理Java异常的两种方法.
.在JavaScript程序中整合Java函数.
.JavaMail常见问题.
.java基础知识:KVM的扩展.
.累积开发.
.开发Java的又一利器-VisualCafe.
.没有迭代到的元素被动态删除时的.
.Java繁体中文处理完全攻略.
.提高Java代码可重用性的三个措施.
.构造函数的继承问题.
.精确的浮点数运算(实际应用中经.
.Think in java 3rd 中文版9.
.lastIndex 属性.
.HelloWorld问题集精华.
.使用JDBC创建数据库对象.
.客户机/服务器系统.
.Javascript实例教程(19) 使用HoT.
.手机斜角地图中A*算法的实用化.

菜鸟初学Java的备忘录(三)

发表日期:2008-1-5 |



今天开始学习Java中多线程的实现.

线程是一些可以并行的,独立的执行的代码.之前我编的程序都只能做一件事情,也就是只有一个线程.多线程的编程就是可以将程序任务分成多个并行的子任务,同时运行,互不干扰.我对多线程的理解是从格斗游戏得来的.格斗游戏中两人对打就是通过两个线程来实现的吧,否则如何能够你出你的招,我发我的冲击波呢.

(1月18日)忽然想到一个问题,补充一下.多线程是不是我们通常所说的多任务呢?我的理解是,不能这样说也可以这样说.
简单说来,多线程提供了一种在进程内部进行多个线程并行调度的机制,而多任务则提供的是在一个操作系统内部运行多个进程的机制.
多任务操作系统(如Windows)的基本原理是这样的:操作系统将CPU的时间片分配给多个线程,每个线程在操作系统指定的时间片内完成(注重,这里的多个线程是分属于不同进程的).操作系统不断的从一个线程的执行切换到另一个线程的执行,如此往复,宏观上看来,就似乎是多个线程在一起执行.由于这多个线程分属于不同的进程,因此在我们看来,就似乎是多个进程在同时执行,这样就实现了多任务.Whoops,真绕口.
如上,多线程和多任务是有很明显的区别的.但是再想一下,在一个应用程序内实现多线程不也是靠CPU分配时间片吗?既然原理是相同的,那么多线程也可以说是多任务的.

一个Java程序启动后,就已经有一个线程在运行,我们可以通过下面的例子来初步建立一个线程的实际印象

class testthread{
public static void main(String args[]){
Thread t=Thread.currentThread();
t.setName("This Thread is running");
System.out.println("The running thead:"+t);
try{
for(int i=0;i<5;i++)
{
System.out.println("Sleep time"+i);
Thread.sleep(1000);//挂起线程,就是让线程休息一会儿,不占用系统资源,因此其它线程可以继续.这里的Thread缺省表示主线程
}
}catch(InterruptedException e){System.out.println("thread has wrong");}
}
}

这只是一个线程,那么我们怎么实现多个线程呢?又怎样让线程做我安排它要做的事情呢?
实现线程体的构造有两种方法.
第一种方法是通过继续构造线程体.
在Java中专门有一个Thread类,这个类里面有一个函数run(),里面记录着线程要完成的操作,就似乎通常所说的主函数main()一样,run()函数运行完了,线程就结束了.通过继续这个类,我们可以定义我们自己的线程,在run函数中告诉它该做什么事情.下面的程序就是继续了一个SimpleThread类,用两个线程来输出HelloWorld.

public class TwoThread{

public static void main(String args[]){
new SimpleThread("HelloWorld1").start();//创建两个线程的实例,就这么简单
new SimpleThread("HelloWorld2").start();
}

}
class SimpleThread extends Thread{ file://真正的内容在这里
public SimpleThread(String str){
super(str);//super代表SimpleThread类的直接父类,这里就是Thread
}

file://我们要线程做的事情都在这里了
public void run(){
for(int i=0;i<10;i++){
System.out.println(i+" "+getName());
try{
sleep((int)(Math.random()*1000));
}catch(InterruptedException e){}
}
System.out.println("Done!"+getName());
}
}

运行的结果是两个线程交替显示各自的HelloWorld十次,输出是混在一起的,因为两个线程是同时运行的.

第二种方法是通过启动接口构造线程体.在任意实现了启动接口的类当中,比如下面的twothread类,都可以实现多线程,我所需要做的就是在这个类的定义当中加上一个run函数.例程如下

class TwoThread implements Runnable{
TwoThread(){
Thread t1=Thread.currentThread();
t1.setName("The first main thread");
System.out.println("The running thead:"+t1);
Thread t2=new Thread(this,"the second thread");//注重这里的this,它表明新线程即t2将会做的事情由this对象来决定,也就是由twothread的run函数来决定
System.out.println("create another thread");
t2.start();//调用该函数将使线程从run函数开始执行
try{
System.out.println("first thread will sleep");
Thread.sleep(3000);
}catch(InterruptedException e){System.out.println("first thread has wrong");}
System.out.println("first thread exit");
}

public void run()//定义run()函数,在本程序中也就是t2这个新的线程会做的事情
{
try{
for(int i=0;i<5;i++)
{
System.out.println("sleep time for thread 2:"+i);
Thread.sleep(1000);
}
}catch(InterruptedException e){System.out.println("thread has wrong");}
System.out.println("second thread exit");
}
public static void main(String args[]){
new TwoThread();//触发构造函数
}
}

运行的结果如下:
The running rhread:Thread[The first main thread,5,main]
creat another thread
first thread will sleep
Sleep time for thread 2:0
Sleep time for thread 2:1
Sleep time for thread 2:2
first thread exit
Sleep time for thread 2:3
Sleep time for thread 2:4
second thread exit

扯扯别的.我们注重到很多Java程序开头都有import语句,似乎和C的#include和Delphi的uses很象哦.import是Java的要害词,负责调入包(package).包由一组类和界面组成,是治理大型名字空间,避免名字冲突的工具.
Java提供了很多包供我们使用,主要如下:

java.applet
设计Applet的类

java.awt
窗口工具包,包含了产生GUI元素的类

java.io
文件输入输出类

java.lang
java语言类,包含:对象,线程,异常出口,系统,整数,原点,数字,字符等

java.net
Socket类及与TCP/IP相关的类

java.util
一些程序的同步类

...

晚上粗略的翻看了一下Java类的概念.作为面向对象编程的基本元素,类的思想在Java当中体现的比C++更为突出.不象C++还保持着对面向过程语言的兼容,Java的程序里面只有类,是彻头彻尾的面向对象,举个例子,"hello"这个字府串也是一个对象,我们可以调用"Hello".equalsIgnoreCase()来判定它是否和其它字符串相同.我们通常在C中看到的主程序Main在Java中也要封装到类当中,通过类来引用.

类的基本性质在Java中的体现无非就是重载,继续和多态.重载是指创建名字相同,参数不同的成员函数,是横向的.继续是从祖先类继续变量和成员函数,是纵向的.多态性举例说来,体现在程序的运行当中,实例变量可以根据需要选择以父类的实例出现或以子类的实例出现.

这些东西多写写,给脑袋的刺激会更多些,记得更牢些,免得象上次那样应聘时,主考官问我面向对象的几个性质是什么,我居然都没能够答全,真是奇郁闷啊.
上一篇:菜鸟初学Java的备忘录(四) 人气:465
下一篇:struts构建文件上传(八) 人气:1099
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-12-2 OpenPNE中文 v2.12.5 for win 中
2008-12-2 谷秋精品课程软件课程版 v2.3
2008-12-2 晴天电影系统(带一键迅雷/自定义
2008-12-2 QQip138闪字程序
2008-12-2 SmartWeb企业智能建站系统 v1.0.2
2008-12-2 梦想不死个人主页 v2009
2008-12-2 开良ASP小偷程序生成器 v1.1
2008-12-2 toolxp.cnalexa世界排名查询 php
2008-12-2 腾讯留言板 v1.3
2008-11-29 Tencent Traveler 4.4
2008-11-29 龙卷风网络收音机 v3.0.0.0
2008-11-29 Intel Chipset Software Install
2008-11-29 TweakVI 1.0 Build 1100
2008-11-29 Opera 9.62 Build 10469
2008-11-29 MPlayer WW编译版 SVN-r28044(20
2008-11-29 NetTools网络工具v1.0.0破解版
2008-11-29 3DGallery三维体验1.1破解版
2008-11-29 SecretBook保密本v1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | OPEN参数生成器 | 弹出式窗口代码产生器 | 密码登录生成器 | 在线按钮生成器 | Meta标签生成器 | 多色彩特效字代码生成器 | 网页代码调试器 | 在线FTP登陆 | Flash取色器 | 配色代码对照表 | 配色辞典 | CSS生成器 | 广告代码 | 框架网页代码生成器 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | 在线调色板 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 元素周期表 | 健康查询 | 世界时间 | 万年历 | 二十四节气 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2009 www.knowsky.com All rights reserved | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成