java线程的概念
为何要多线程
线程是比线程更小的概念,一个进程里边会有多个线程。
一个cup要处理多个事情,只能把时间切分成多个,例如1毫秒处理音乐,下一毫秒处理qq等。这样每处理的一个内容叫做线程。
简单的java线程的实例
java的多线程有两种实现的方式,一种是Thread类的方式,继承这个类并且重新run方法。
线程只能启动一次。
实现的代码如下:
package com.thread;
class MyThread extends Thread{
//实现run方法,当线程的实例调用start方法时执行就是这个run方法。
public void run() {
System.out.println(getName()+":线程开始运行了");
}
}
public class ThreadTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyThread mt=new MyThread();
mt.start();//开启线程
}
}
运行的结果如下:
Thread-0:线程开始运行了
Runnable创建线程
可以创建线程,但是不能够开启线程。这个创建线程的方法在实际当中用的还是比较多的。
如下代码:
//实现接口的方式来创建线程Runnable
class PrintRunnable implements Runnable{
//实现这个方法是必须的
public void run() {
System.out.println(Thread.currentThread().getName()+":正在运行");
}
}
实际使用这个Runnable的接口,如果要创建线程则需要借助于Thread才可以
如下代码:
PrintRunnable pr=new PrintRunnable();
//但是Runnable创建线程必须要Thread才能够创建,自己本身是不能够直接创建的,如下
Thread t=new Thread(pr);
t.start();//开始这个线程
运行的实际结果是:
Thread-0:正在运行
关键字implements 继承接口的关键字要记得
线程的生命周期
1,new创建一个线程
2,通过start变成可运行状态
3,可运行状态,cpu分配时间后变成正在运行状态
4,阻塞状态(sleep停止,join,wait,I/0流)。如果变成不停止则是sleep超时,join完成,wait是要notify或者是notifyAll才可以。
5,不管哪个状态只要线程调用了stop方法就会线程就会停止
sleep方法的使用
Thread.sleep(ms);//表示的是这个线程多少毫秒后,cpu才会给它分配时间。
join方法的使用
这个是抢线程。就是要等到这个线程结束后才能够执行别的线程。
mt.join();//mt是Thread的子类的实例。
mt.join(ms);//表示这个线程抢过来后执行多少毫秒后再让出去。
java线程的优先级
java的线程的优先级别是从1~10 如果超过10就会报错。
mt.getPriority();//获取线程的优先级
mt.setPriority(int priority); //设置java线程的优先级。
java线程的优先级越高,就会越限制性这个线程。
线程的同步
java线程的同步是在执行这个线程时不会被其他的内容所打扰。这样保证这个线程正常执行完毕。
在静态方法,普通方法、和代码块都可以加上这个关键字synchorized
线程间的通信
使用的是wait方法和notify的方法或者是notifyAll的方法。
记住cup是无规律的获取线程的。所以有的时候我们再获取一个线程的时候,可能会持续对一个线程进行多次的获取。
网友评论