java 线程有那些状态如何保证线程安全

Java线程状态有以下几种:
新建状态(New):线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。
就绪状态(Runnable):也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。处于就绪状态的线程,随时可能被CPU调度执行。
运行状态(Running):线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。
阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。
等待状态(Waiting):排队等待其他事情,由于线程中调用了wait()进入阻塞状态。
超时等待状态(Time-waiting):排队等待其他事情,由于线程中通过sleep()进入阻塞状态。
终止状态(Terminated):工作完成了。系统里面的线程已经执行完毕,销毁了,(相当于线程的run执行完了),但是Thread对象还在。当多个线程对同一个共享变量进行操作时可能会产生的问题。
解决方法:
使用内部锁synchronized,可以使用同步代码块,如果是实例方法可用this作为锁对象,如果是静态方法,可以用类.class作为锁,或者使用同步方法底层和同步代码块一样,如果是实例方法默认用this作为锁,如果是静态方法默认使用类.class。
使用java.util.concurrent包中的锁,例如ReentrantLock。

你可能感兴趣的:(java)