线程的基本概念-马士兵线程学习笔记

理解线程

其实搞清楚线程和进程的关系就很好理解线程了。比如说你开一个微信,那微信就是一个进程, 但是微信里你同时和不同的人聊天,那不同的窗口就是一个个线程。线程实际就是可执行程序的最小单元, 是一个进程的不同执行路径。

线程的两种创建方式

线程的创建有很多种写法,但是归根结底就只有两种,一种是实现runnable接口,一种是继承Thread类

public class HowToCreateThread{
     static class MyThread extends Thread{
        @override
        public void run(){
          System.out.println("hello Thread!");
   }
     static class MyRun implements Runnable{
         @override
        public void run(){
          System.out.println("hello run!");
      }  

    }
     public static void  main(String[] args){
         new MyThread().start();
         new Thread(new MyRun()).start();
         //其实就是第二种方式的lambda表达式
         new Thread(()->{
          System.out.println("hello run!");
        })

}

}
}

熟悉调用线程的几个函数

  • sleep()
    • 调用Thread.sleep(), 该线程就进入睡眠中,让别的线程去使用CPU。等时间到了,它再进入等待序列。
  • yield()
    • 调用Thread.yield(),就是谦让的退出一下,进入等待的队列,让其他线程有机会可以使用CPU。
  • join()
    • 有两个线程,一个是t1, 一个是t2, 在t1里面调用t2.join(),则t1会等待t2执行完再执行t1.
public class Sleep_Yield_Join(){
  static void testSleep(){
   new Thread(()->{
   for(int i = 0; i< 100; i++)
       System.out.println(i);
   try{
      Thread.sleep(500);
   }catch(InterruptException e){
      e.printStackTrace();
   }

   }).start();
 };

static void testYield(){
   new Thread(()->{
   for(int i = 0; i< 100; i++)
       System.out.println(i);
   try{
      Thread.yeild();
   }catch(InterruptException e){
      e.printStackTrace();
   }

   }).start();
 };

static void testJoin(){
   Thread t1 = new Thread(()->{
   for(int i = 0; i< 100; i++)
       System.out.println(i);
   try{
      Thread.sleep(500);
   }catch(InterruptException e){
      e.printStackTrace();
   }

   }).start();

  Thread t2 = new Thread(()->{
   try{
      t1.join();
   }catch(InterruptException e){
      e.printStackTrace();
   }

   }).start();
 };
 static void main(String[] args){
  testSleep();
  testYield();
  testJoin();
 }

}

线程的状态

  • 开始:start()
  • 就绪/Running:线程开始后,TimedWaiting结束,notify(),notifyAll(),LockSupport.unpark();
  • 停止:线程结束后
  • TimedWaiting:被调用sleep(time),wait(time),LockSupport.park(time)
  • Waiting: 被调用wait(),join(),LockSupport.park()
  • Blocked: 在同步代码块里

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值