实现多线程的两种方法

java 实现多线程通过两种方式1.继承Thread类 ,2.实现Runnable接口

    class Newthead extends Thread{
public void run(){
System.out.println("thread run");
}
}
class Newthead implements Runnable{
@Override
public void run(){
System.out.println("thread run");
}
}

用Runnable还是Thread?

因为java 类是单继承的,但却可以实现多个接口,所以推荐使用Runnable

启动线程

   public static void main(String[] args) throws IOException {
Thread thread = new Thread(new Newthead());
thread.start();
System.in.read();
}

当我们需要启动线程的时候需要调用start()方法,start()方法内部调用run()方法。

当你直接调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动。

终止线程

Thread提供了suspend()、resume()和stop()来对线程进行暂停,恢复和停止操作。但是这些方法都是废弃的

因为suspend()在调用后,线程不会释放已经占有的资源(比如锁),而是占有着资源进入睡眠状态,这样容易引发死锁问题。

stop()方法在终结一个线程时不会保证线程的资源正常释放。

安全的终止线程

安全的终止线程可以通过变量的形式,通过volatile保证多线程的可见性

Thread.join()

如果一个线程A执行了thread.join()语句,其含义是:当前线程A等待thread线程终止之后才从thread.join()返回。线程Thread除了提供join()方法之外,

还提供了join(long millis)和join(long millis,int nanos)两个具备超时特性的方法。

这两个超时方法表示,如果线程thread在给定的超时时间里没有终止,那么将会从该超时方法中返回。

线程状态

thread的状态如下:

  1. NEW 初始状态,线程被构件,但是还没有调用start()方法
  2. RUNNABLE 运行状态,hava线程将操作系统中的就绪和运行两种状态统称为 运行中
  3. BLOCKED 阻塞状态,表示线程阻塞于锁
  4. WAITING 等待状态,标示线程进入等待状态,进入该状态标示当前线程需要登台其他线程做出一些特定的动作(通知或中断)
  5. TIME_WAITING 超时等待状态,该状态不同于waiting,它是指定的时间自行返回的
  6. TERMINATED 终止状态,标示当前线程已经执行完毕

最新文章

  1. ZeroMQ接口函数之 :zmq_send – 在一个socket上发送一个消息帧
  2. SQL DEFAULT 约束
  3. github生成燃尽图
  4. CLR探索应用程序域世界(上):Windbg SOS剖析揭示域世界
  5. Modernizr 与 Polyfill
  6. 完美atoi,哈哈
  7. 2013Java最新面试题
  8. HTML5 History对象,Javascript修改地址栏而不刷新页面
  9. zabbix 通过smtp 邮件报警
  10. 把一个select查询结果插入到一个表(可选指定字段和值实例)
  11. 一维树状数组(HD1166)
  12. SecureCRT 连接虚拟机Linux
  13. android 泰国/缅甸语/捷克较低,Contacts联系出现精神错乱之类的问题清单
  14. web基础之会话技术
  15. 逻辑性最强的React Native环境搭建与调试
  16. SVN不能解锁,报错:没有匹配的可用锁令牌的解决方法
  17. Python lambda介绍
  18. dns服务扩展
  19. STL中优先队列的使用
  20. 破解Excel密码

热门文章

  1. position总结图
  2. 移除HTML5 input在type="number"时的上下小箭头
  3. JavaScript学习笔记1之基础知识点
  4. Android中使用AsyncTask实现文件下载以及进度更新提示
  5. hideSoftInputFromWindow
  6. ARCGIS SDE空间化处理
  7. Android笔记——Android自定义控件
  8. linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解?
  9. Oracle数据行拆分多行
  10. java获取日期之间天数的方法