线程入门

一、应用程序、进程和线程

在开始讲进程前,我们来区别一下这三者,应用程序就是可执行的代码,存放在硬盘,当执行程序时,就会产生进程,而一个进程会有单线程与多线程之分,在程序运行中,进程的数据会从硬盘写入到内存中,CPU工作时,会把内存中的数据写入到寄存器中,所以内存和寄存器中的数据并不完全同步,这点注意一下,后边会再讲到。


二、线程的作用是什么呢?

假如我们要做一个飞机大战的游戏,那么有很多敌机对不对,而他们的飞行路径和攻击时刻等等都不同,这时候,假如只有一个线程,那就无法处理,因此,线程应运而生,多线程的优势在于同时处理

线程是可以很多的,上千也没有问题。但其实我们的电脑常见的就4个或8个进程,这是怎么回事呢?其实,cpu的运行速度很快,其实cpu在不断地切换线程,只是我们感觉不到罢了。


三、线程怎么工作的?

首先JVM会自行启动一个线程(即主线程)来执行主函数内的代码,假如你写了子线程,那么JVM会启动新进程。主线程只负责启动、关闭子线程。其余时候主线程和子线程都是单独运行的


四、怎么写一个多线程的程序

线程要用到Thread类,我们可以通过继承Thread类或TimeTask类,也可以实现Runnable接口,或者在内部定义。

与Thread相关的关键字有run、sleep、start等等。

start:启动线程,格式为:对象名 . start ( ) ;

run:启动线程后,会执行run方法中的代码,一般会用循环来重复执行。

sleep:通常是Thread.sleep(sleeptime);这里的sleeptime指线程暂停的时间,因为cpu运行很快,假如不暂停一下,你会发现多线程游戏的运动贼快,而且会耗占大量资源,电脑因此变卡。


//示例
public class Thread1 implements Runnable{
    public Thread1(int id) {
       this.id=id;
    }
    private int id;
    public static void main(String[] args) {
    //构建10个线程
         for(int t=1000;t<1010;t++){
              //实例化本类,且传入id参数t
               Thread1 th1 =new Thread1(t);
              //实例化Thread类,并添加th1对象
               Thread th=new Thread(th1);
              //启动线程
	       th.start();
          }
    }

    public void run(){
	while (true){
	      long currentTime=System.currentTimeMillis();
	      System.out.println(id+"号线程:"+currentTime);
              try{
		   Thread.sleep(this.id*1000);
              }catch(InterruptedException ie){
		   System.out.print("dsg"+ie);
              }
	 }
     }
}

当我们运行后,就会有如下的输出。

我们可以看到1001到1009号线程的顺序是混乱的,你再多试几次,会发现每次的顺序都不同,这是因为线程的运行具有一定的随机性,这个我们控制不了。

线程的概念和基本实现就到此为止了,下次我们可以尝试做个多个小球不断运动的界面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值