java复习-多线程

和线程之间的关系:

进程:进程是程序的一次动态执行过程,他经理了代码加载,执行到执行完毕的一个完整过程,这个过程也是进程本身从产生,发展到最终消亡的过程。

线程:线程是实现并发机制的一种有效手段,进程和线程一样,都是实现并发的一个基本单元。

java中多线程实现:

集成Thread和实现runnable

通过线程类的start方法来并发执行线程里面的线程主体内容。

Runnable线程的执行方式如下:


Thread是Runnable接口的子类.

Thread类与Runnable接口的区别:

1 使用Thread类在操作多线程的时候无法达到资源共享的目的,runnable接口能够实现资源共享;

2  Runnable接口比起继承Thread类有如下的明显的优点:

 

  • 适合多个相同程序代码的线程去处理同一个资源。

  • 可以避免由于但继承局限所带来的影响。

  • 增强代码的健壮性,代码能够多线程共享,代码和数据独立

 

线程状态:

 

创建状态:线程对象创建之时:Thread t = new Thread();

就绪状态:t.start(),调用start方法,等待cpu进行调度;

运行状态:执行线程里面的run方法;

阻塞状态:暂时停止执行,可能将资源交给其他线程使用,调用线程的wait或者sleep方法;

终止状态:线程执行完毕后不在使用了。

线程常用操作方法:

取得线程和设置线程名称:

Thread.currentThread().getName(); -- >获取线程名称。

当然也可以通过setName方法进行设置。

java运行时候启动几条线程:

2条;

1条jvm线程,一条gc线程。

 

判断线程是否运行:

强制线程执行:

调用线程的join()方法,其他线程无法运行,必须等待此线程完成后才能继续执行。

线程休眠:

Thread.sleep()。

线程中断:

一个线程被另外一个线程中断其操作的状态,使用interupt()方法完成。

后台线程:

只要程序没执行完,java进程不会消失,设置后台线程,即使进程消失,线程继续执行。

通过setDaemon()来实现。

线程优先级:

 

线程礼让:

同步和死锁:

同步是解决什么问题呢,一个数据在读取的时候,其他线程访问该线程,那么这时候就应该使用同步。

同步代码块:

同步方法:

生产者消费者问题:

 

线程生命周期:

线程有:

suspend()暂时挂起线程

resume()恢复挂起的线程

stop()停止线程

这三个方法容易导致死锁问题,不推荐使用。

比较好的停止线程的方法:

通过标志位让线程停止。

原文地址:https://www.cnblogs.com/androidsuperman/p/4831280.html