java笔记_线程的艺术

 

 

 


前言

线程——从串行到并行之路,让代码以全新的方式运行!本文将以java为例,实现一个简单的线程。
 


 

一、线程是什么?

在一个程序中,一般涉及很多的数据处理,如果由原来的一个一个地排成一队处理,变成排成两队处理,效率是不是要高很多呢?线程就是这个原理。你也许会问,计算机总算力不变,不管排成几队总时间应该不会变呀。

那举个例子。你在食堂打饭,有多少个打饭的阿姨,就相当于计算机有多少算力。有多少个窗口,就相当于计算机有多少线程。例如4核8线程,就是4个阿姨8个窗口。那么为什么一个阿姨负责2个窗口呢,一个煮面的窗口煮好一次需要3分钟,一个煮粉的窗口需要2分钟,这其中不是每个窗口都需要一直操作的,可能放面需要30秒,捞面需要30秒。那么中间还有120秒,煮面的阿姨就可以先煮个粉,大大提高了工作效率。而串行就是一系列代码排成一队,在一个窗口打饭(被执行),线程(并行)则是让他们从一个窗口解放,分散到多个窗口,这是不是大大节约了运行时间呢?

二、如何创建一个线程

1.继承Thread类

代码如下:

public class drawThread extends Thread{
    private java.awt.Graphics graphics;
    public drawThread( Graphics gr) {
        this.graphics=gr;
    }
    public void run() {
    while(true) {
        for(int i=0;i<500;i++){
             graphics.drawLine(i,i,i,7);
        }
    }
}  

     使用线程必须先继承线程类Thread,在创建线程对象后用Thread.Start();语句启动它。注意不是用Thread.run();。

在继承Thread后要重写run方法,线程启动时(Thread.Start();)就会自动调用run方法;例如上面这个程序被启动后

就会一直画一些奇怪的图像。现在就来试试这个程序吧!

2.调用Thread对象

public class runThread extends JFrame{
	public static void main(String[] args) {
		runThread rT=new runThread();
		rT.drawUI();
	}
	private void drawUI() {
		this.setTitle("用线程画图");
		this.setSize(500, 400);
		this.setVisible(true);
		Graphics g=this.getGraphics();
		drawThread dT=new drawThread(g);
		dT.run();
	}
}

运行结果:

    是不是很神奇,其实还有很多有趣的代码,你也不知道会画出什么来,画就完事,把程序运行了就知道了。

 

3.线程的结束

   在run();方法中,如果方法运行完了,就可以自动结束方法。线程也随之结束。但有时候需要run方法一直执行下去,比如本例中使用while(true){}, 这时可以定义一个boolean变量来代替true,需要结束循环时就改变boolean变量的值。即while(boolean){}。这种结束线程的方式是比较合理并且温和的,还有一些比较暴力的结束方式,使线程强制结束。这种方式可能会带来不可预知的错误,有一定的风险,请谨慎使用。例如stop();

线程结束就消失了。如果现在要停止一个线程,但之后又想继续运行线程该怎么办呢?

很简单,把run方法里的代码改成这样

while(true){

while(boolean){}

}

是不是感觉有点套娃呢?那你的感觉对了。

 


总结

这个线程十分简单,时候零基础的人看。如果你还看不懂,只需要先看看我的另一篇文章,类的详解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值