进程和线程
进程是指在内存中运行的应用程序,每个进程都有一个单独的内存空间;
线程是进程中的一个执行流程,一个进程中可以存在多个线程。
多个线程的同时执行只是理想的情况,实际上线程之间的程序是按某种规则轮换执行的。也就是说,实际上程序还是一步一步的执行,并不是理论中所说的“同时执行”,那么,多线程相对于单线程的高效体现在什么地方呢?其实,程序执行的过程中,每个步骤之间是有一定的间隙的,多线程就是在这个间隔的时候里做了其他的事情,把本来浪费的时间利用了起来,效率有了一定的提高。真正的“同时执行”,在并行编程中是可以实现的。
创建线程主要有两种方法,一是扩展java.lang.thread,另一种是实现runnable接口,创建好之后调用.start()来启动线程。
同一线程是不能重复开启的,因为一旦run()方法中的代码执行完,该线程就会被销毁。
下面这个例子演示了如何使用多线程来做一个简单的摇奖程序,代码如下:
threadtest.java
java代码
import java.awt.event.actionevent;
import java.awt.event.actionlistener;
import java.util.random;
import javax.swing.jbutton;
import javax.swing.jframe;
import javax.swing.jlabel;
import javax.swing.jpanel;
public class threadtest extends jframe implements actionlistener {
private jpanel p = new jpanel();
private jbutton btn = new jbutton("摇奖");
private jlabel [] labs = new jlabel [7];
private random rnd = new random();
public threadtest() {
this.p.setlayout(null);
int x = 30;
for(int i = 0; ithis.labs.length; i ++) {
labs[i] = new jlabel("0");
labs[i].setbounds(x, 30, 25, 25);
this.p.add(labs[i]);
x += 35;
}
btn.setbounds(90, 100, 100, 25);
btn.addactionlistener(this);
this.p.add(btn);
this.add(p);
this.setname("摇奖");
this.setsize(300, 200);
this.setdefaultcloseoperation(exit_on_close);
this.setlocationrelativeto(null);
this.setvisible(true);
}
public static void main(string[] args) {
threadtest hw = new threadtest();
}
public void actionperformed(actionevent ae) {
string cmd = ae.getactioncommand();
if(cmd.equals("摇奖")) {
//创建线程并启动
mythread thr = new mythread();
thr.setlabels(labs);
thr.start();
}
}
}
mythread.java
java代码
import java.util.random;
import javax.swing.jlabel;
public class mythread extends thread {
private jlabel [] labels;
private random rnd = new random();
public mythread() {
}
public mythread(jlabel [] labels) {
this.labels = labels;
}
public void setlabels(jlabel [] labels) {
this.labels = labels;
}
public void run() {
int num = 0;
int size = 33;
string strnum = "";
for(int i = 0; ilabels.length; i ++) {
for(int j = 0; j20; j ++) {
num = rnd.nextint(size) + 1;
strnum = (num >= 10 ? "" : "0") + num;
labels[i].settext(strnum);
try {
thread.sleep(100);
} catch (interruptedexception e) {
e.printstacktrace();
}
}
}
}
}
第一个文件主要是主窗体的相关设置,第二个文件主要是实现摇奖的过程。
标签: 多线程
绿色通道:好文要顶关注我收藏该文与我联系
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/