线程的一些记录

线程的定义

线程是程序执行的最小单位,每当程序运行时,会创建一个进程,然后进程中每当出现一个任务就会生成或者调度一个线程进行处理。
一个进程包含多个线程,所有线程共享进程的资源,但是每个线程都有自己的堆栈和变量。

单线程:银行只有一个员工,处理完A的请求再去处理B的请求,必须一个一个处理。
多线程:银行有多个员工,A和B的请求在同时处理或者一个员工处理A的请求,过了一会,B来了,另外一个员工去处理了,大家互不影响,但是效率提升了。

线程的实现

  1. 继承Thread,Thread类本身实现了Runable类
	public class Demo {
	    public static void main(String[] args) {
	        MyThread thread = new MyThread();
	        thread.start();
	    }
	}
	
	class MyThread extends Thread {
	    @Override
	    public void run() {
	        System.out.println("当前代码段正在被调用的线程名称:" + Thread.currentThread().getName());
	        System.out.println("当前线程的名字:" + this.getName());
	    }
	}
  1. 实现 Runable

同样是重写run方法,但是最后调用时通过创建Thread来进行启动线程。
因为类只能继承一次,所以很多时候可以用Runable来实现线程,相对比较灵活。

	public class Demo {
	    public static void main(String[] args) {
	        MyThread2 thread = new MyThread2();
	        new Thread(thread).start();
	    }
	}
	class MyThread2 implements Runnable {
	    @Override
	    public void run() {
	        System.out.println("当前代码段正在被调用的线程名称:" + Thread.currentThread().getName());
	    }
}
  1. 实现 Callable
    FutureTask类也可以放入new Thread中进行启动,因为它实现了RunnableFuture类,RunnableFuture类又继承了Runnable类,所以它可以认为是一个Runnable类。
	class MyThread3 implements Callable {
		public class Demo {
		   public static void main(String[] args) throws Exception {
		      MyThread3 thread = new MyThread3();
		      FutureTask<Object> futureTask = new FutureTask<>(thread);
		      new Thread(futureTask).start();
		      // 是否执行完成
		      System.out.println(futureTask.isDone());
		      // 手动关闭线程,下面的get会报错
		      // 如果传入false,不会关闭,因为false只会关闭还未开始的任务。(可能是用来停止订单任务的?这个我试了几次,还是有点迷糊)
		      //沉睡
		      // Thread.sleep(10);
		      // futureTask.cancel(true)
		      // 这里会发生阻塞,会一直等到任务执行完毕才返回
		      Object o = futureTask.get();
		      System.out.println(o.toString());
		   }
	}
    @Override
    public Object call() throws Exception {
        System.out.println("当前代码段正在被调用的线程名称:" + Thread.currentThread().getName());
        //Thread.sleep(5000);
        return "执行完毕,线程名称为"+Thread.currentThread().getName();
	    }
	}

一般情况下用的比较多的还是实现Runnable,但是如果有需要返回值的线程,还是得用到Callable,直接继承Thread一般使用较少,因为不灵活。

线程的生命周期

  1. 创建new

创建也就是执行了上面的new Thread()。

  1. 就绪runnable

就绪是调用了start方法,在等待cpu分配资源。

  1. 运行中running

抢占到资源后就调用run方法,成为运行中状态。

  1. 阻塞blocked

在运行过程中,因为sleep(不会释放锁),wait等进入等待状态,然后它的资源会被其他线程抢占使用,必须等待notify或者notifyAll()方法唤醒才能重新开始,再次抢占资源。

  1. 销毁terminated

线程执行完成或者发生异常或者被中断,线程都会结束,然后会被销毁释放。

sleep和wait的区别

sleep在Thread类中,wait在Object类中。
sleep不会释放锁,wait会释放锁。
sleep使用interrupt()来唤醒,wait需要notify或者notifyAll来通知。

之后想到再写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值