我的java之路之java的线程Thread

      线程有单线程和多线程,现实中我们看电视是一个线程,吃水果也是一个线程,那么边看电视边吃水果就是多线程,而java中最重要的特性之一就是内置了对多线程的支持,多线程的官方解释为:同时存在几个执行体,按照几个不同的执行线索共同工作的情况。当然,多线程指的是宏观来讲,微观上了说,计算机不可能在同一时刻执行多个执行体。

       要想理解好线程,首先要理解一下几个概念:线程,进程,程序,程序是一段静态的代码,进程是程序的一次动态的执行过程,一个进程分为多个进程!

     对于线程的生命周期有以下四个:

     开始创建:此时进程仅仅是创建,在内存中开辟了自己的空间罢了,并不会执行

   开始运行:只有调用start();方法的时候,进程才会运行,这个时候会调用Thread的子类的run方法,因而,如果线程是继承Thread类的时候要重写run方法

    中断:线程被比他级别高的占用,或者在使用CPU时,执行了wait().[可以使用notify()方法唤醒]sleep();

   死亡:执行完run()方法后线程会死亡,到此线程结束对于线程的可以继承Thread,实现Runnable的方法,对于以上的知识点我们老规矩,上代码来分析

     public class ThreadA extends Thread {

         @Override public void run(){

             //循环输出一句话

             for(int i=0;i<10;){

               System.out.println("!!A Thread--->");

                i++; }

     }

}

再写一个ThreadB,与ThreadA完全相同,只是A变成B

以下是测试类

    public class ThreadLife {

       //其实main方法就是一个主线程

              public static void main(String[] args) {

              ThreadA hello; //创建线程

              hello=new ThreadA();

             ThreadB world=new ThreadB(); //启动线程hello

              hello.start();

             //启动线程world

           world.start();

      //主线程的输出

            for(int i=0;i<5;i++){

               System.out.println("main Thread");

            }

       }

}

多运行几遍这个程序,你会发现每次输出会不同的我们继续,对于线程,是java的一个重点,不可能只有这么点内容,Thread是一个类,类中肯定有方法,就如String类一个样,拥有者自己的方法

 currentThread()获取当前线程

notifyAll():唤醒所有的进程

线程同步synchronized,这个关键字表示着当前资源被锁定了,其他的进程不能去访问该线程的资源

最后说一个Object里面的方法:wait(),notify(),notifyAll()这些是Object类的final方法,也就是不能被重写的方法对于线程中有一个计时器线程Timer,对于这个线程我们使用定时器的时候非常有用,以下是一个定时器

         public class TimerTest {

       /** * @param args *

          * 定时器类Timer在java.util包中。使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,

         * 设定指定的任务task在指定的延迟delay后执行。定时器任务类TimerTask是抽象类,继承并重写其run()方法,可实现具体任务。

         * schedule(TimerTask task, Date time)设定指定任务task在指定时间time执行。

        * cancel()方法结束这个定时器。

        * schedule(TimerTask task, long delay, long period)方法设定指定任务task在指定延迟delay后进行固定延迟peroid的执行。

        * scheduleAtFixedRate(TimerTask task, long delay, long period)方法设定指定任务task在指定延迟delay后进行固定频率peroid的执行。

        * 要实现一个定时任务,运用java中的Timer和TimerTask类可以非常容易实现实时调用处理函数。

        * 这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需要

         */

    public static void main(String[] args) {

            Timer time = new Timer();

          //在1秒后执行此任务,以后每隔3秒执行这个MyTask任务

         time.schedule(new MyTask(), 1000,9000);

          while(true){

               Scanner scan = new Scanner(System.in);

          、String str = scan.nextLine();

               if(str.equals("ok")){ time.cancel();// 终止此计时器,丢弃所有当前已安排的任务。

             System.out.println("任务结束"); }

       }

    }

   static class MyTask extends TimerTask{

          public void run() {

            System.out.println("-----------------间隔3秒打印一次!-----------------------"); }

          }

}

ok对于线程,好久没用用过了,说的有点陌生,有什么不对的或者要补充的地方希望大家留言给我,谢谢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值