Thread类
<h3>线程的优先级</h3>
<pre><code>设置某个线程优先等级
java为线程提供了10个优先级
优先级可以用整数1-10表示,超出范围会抛出异常
主线程默认优先级为5(数组越大优先级越大)
常量优先级
MAX_PRIORITY :最高优先级10
MIN_PRIORITY :最小优先级1
NORM_PRIORITY:默认优先级</code></pre>
<h3>获取线程的优先级</h3>
<table>
<thead>
<tr>
<th style="text-align: left;">方法</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">public int getPriority()</td>
<td style="text-align: left;">获取线程的优先级方法</td>
</tr>
<tr>
<td style="text-align: left;">public void setPriority(int new Priority)</td>
<td style="text-align: left;">设置线程的优先级</td>
</tr>
</tbody>
</table>
<h3>Tread</h3>
<pre><code>Thread 是一个线程类 位于java.lang 包下</code></pre>
<table>
<thead>
<tr>
<th style="text-align: left;">构造方法</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">Tread()</td>
<td style="text-align: left;">创建一个线程对象</td>
</tr>
<tr>
<td style="text-align: left;">Tread(String name)</td>
<td style="text-align: left;">创建一个指定指定名称的线程对象</td>
</tr>
<tr>
<td style="text-align: left;">Thread(Runnable target)</td>
<td style="text-align: left;">创建一个基于Runnable接口实现类的线程对象</td>
</tr>
<tr>
<td style="text-align: left;">Thread(Runable target,string name)</td>
<td style="text-align: left;">创建一个Runnable接口实现类,并且具有指定名称的线程对象</td>
</tr>
</tbody>
</table>
<pre><code>thread 类的常用方法</code></pre>
<table>
<thead>
<tr>
<th style="text-align: left;">方法</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">public void run()</td>
<td style="text-align: left;">线程相关的代码写在该方法中,一般需要重写</td>
</tr>
<tr>
<td style="text-align: left;">public void start()</td>
<td style="text-align: left;">启动线程的方法</td>
</tr>
<tr>
<td style="text-align: left;">public static void sleep(long m)</td>
<td style="text-align: left;">线程休眠m毫米的方法</td>
</tr>
<tr>
<td style="text-align: left;">public void join()</td>
<td style="text-align: left;">优先执行调用join() 方法的线程</td>
</tr>
</tbody>
</table>
<pre><code>Runnable 接口
只有一个方法run()
Runnable是java 中用以实现线程的接口
任何实现线程功能的类都必须实现该接口</code></pre>
<h4>线程的生命周期</h4>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/5a7731f9cedf4ec1a964d6c736abd341?showdoc=.jpg" alt="" /></p>
<h4>sleep</h4>
<pre><code>Thread 类的方法
public static void sleep(long millis)
作用:指定的毫秒数内让正在执行的线程休眠(暂停执行)
参数为休眠的时间,单位是毫秒</code></pre>
<h4>join</h4>
<pre><code>Thread 类的方法
public final void join()
作用:等待调用该方法的线程结束后才能执行</code></pre>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/536ca883e74cd65896183aee7511c213?showdoc=.jpg" alt="" />
public final void join(long millis)
作用:等待该线程终止的最长时间为millis毫秒</p>
<h3>多线程运行问题</h3>
<pre><code>各线程是通过竞争CPU时间而获得运行的机会的
各个线程什么时间得到CPU时间占用多久,是不可预测的
一个正在运行着的线程在什么地方被暂停是不确定的
需要将对象进行锁定
使用关键字 synchronized(同步)[ˈsɪŋkrənaɪzd] 实现</code></pre>
<h3>synchronized 使用</h3>
<pre><code>public synchronized void saveAccount(){}
public static sychronized void saveAccount(){}
synchronized(obj){}</code></pre>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/9faf26fa7f363118a6d3629c520820e5?showdoc=.jpg" alt="" /></p>
<h3>线程间的通信</h3>
<pre><code> 场景:
问题:账号余额不够了怎么办?
等待存入足够的钱后处理
死锁 两个线程一直处于等待 使用notifyAll()唤醒</code></pre>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/5ac87eb0c0ad9ace160f1bbac7b58ef5?showdoc=.jpg" alt="" /></p>
<pre><code>wait() 方法:中断方法的执行,使线程等待
notify() 方法:唤醒处于等待的某一个线程,使其结束等待
notifyAll() 方法: 唤醒所有处于等待的线程,使它们结束等待</code></pre>
<h3>总结</h3>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/8e5166dfe55edc4391f53b66ff852d17?showdoc=.jpg" alt="" /></p>