java面向对象--多线程

本文探讨了多线程技术在简化摇奖程序实现过程中的作用,通过创建线程并实现摇奖逻辑,展示了多线程相较于单线程在效率提升方面的优势。代码实例展示了如何通过多线程并发执行任务,提高了程序执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程和线程

进程是指在内存中运行的应用程序,每个进程都有一个单独的内存空间;

线程是进程中的一个执行流程,一个进程中可以存在多个线程。

多个线程的同时执行只是理想的情况,实际上线程之间的程序是按某种规则轮换执行的。也就是说,实际上程序还是一步一步的执行,并不是理论中所说的“同时执行”,那么,多线程相对于单线程的高效体现在什么地方呢?其实,程序执行的过程中,每个步骤之间是有一定的间隙的,多线程就是在这个间隔的时候里做了其他的事情,把本来浪费的时间利用了起来,效率有了一定的提高。真正的“同时执行”,在并行编程中是可以实现的。

创建线程主要有两种方法,一是扩展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^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值