2019独角兽企业重金招聘Python工程师标准>>>

java多线程最大线程数怎么设置 java 最大线程_python



java并发的实现就是线程的范围,这里说一下线程类的问题,本文注重的线程的运行状态及线程间的通信。

线程的几个重要的状态:new,runnable,blocked,running,waiting,dead。涉及到线程的整个生命周期。在整个生命周期中,除了new,dead之外其他的几个是可以相互转换的,线程一旦new创建好了就不能再返回new的状态,线程一旦dead消亡后也是不能再回到消亡之前的任何状态。

new:新建。线程的新建是new Thread(),是创建一个线程的操作,创建线程后进入可运行状态就是runnabe。当然线程的实现有两个主要的方法,一个是继承Thread,一个是实现Runnable,或者Callable的接口,然后实现run方法中的内容,run方法中的内容就是你创建线程后要运行的内容。

run:运行。线程创建的结果就是要运行指定的线程代码,并得到相应的结果。这里有个重要的特点:Thread t = new Thread();  1) t.run();     2),t.start();      上面的两个执行都是没有问题,区别在于,t.run()是执行t中的run方法,执行的线程还是创建该对象的线程;t.start()是开启一个线程并且执行run方法中的代码,执行的线程是新建的thread。

blocked:阻塞。阻塞的最重要目的,多个线程操作共享数据时,为了保证数据的安全,共享数据一次只允许一个线程进行修改,保证数据的一致性,所以其他线程就要进入阻塞状态。线程本身也可以进行该操作,主要体现在wait(),notify(),notifyall()的方法见调用。上面的所有核心内容是:阻塞时多线程操作共享数据使用的锁是同一把锁,确保该锁是唯一的,线程的wait(),notify(),notifyall()的操作使用的也是相同的对象,才能达到线程间通信的效果。sleep的期间线程依旧是在阻塞状态的。

waiting:等待。线程的等待就是线程再次持续静默操作指定的时间后继续执行之前的内容,sleep()和wait()最大的区别是sleep是不会释放当前线程拥有的锁和资源,wait()则会释放该线程持有的锁和资源。

dead:消亡。线程的消亡就是线程执行完成后,进入垃圾回收,该线程将被垃圾回收机制回收。

线程中还有几个重要的方法:yied(),join(),setDaemon(),setPriority()。

yied的方法是线程执行让步操作,放弃当前线程的执行权,这里有一个很多人会误解的地方,放弃不等于不再拥有,线程的执行时需要cpu的切换的,如果a线程yied后cpu有马上切换到a线程了,这个是告诉当前线程我要让步操作,但是没有告诉当前线程不要再执行。

join的方法当前线程要等到join的线程执行完后才继续执行,或者是带参数的方法,要在join线程执行一段时间后再执行当前线程。

daemon的方法是让当前线程设置为守护线程,后台运行,该方法一定要在start方法前设置,保证正确运行。

priority的方法是对指定的线程进行优先级的设定,设定的值在1-10之间,这里也有一个误区,和yied的方法有点类似,我设置为高优先级了,也是需要和cpu的切换有关系的,线程的执行顺序在多线的运行中可能每次的结果都不一眼