- 线程的创建与启动
- 线程的状态和生命周期
- 线程的调度
- 线程同步和死锁
线程的创建(简单来说就是继承Thread类或者Runnable接口)
- 创建一个Thread类,或者一个Thread子类的对象
- 创建一个实现Runnable接口的类的对象
Thread类
是一个线程类,位于java.lang包下
常用方法,
方法 | 说明 |
---|---|
run() | 线程相关的代码写在该方法中,一般都需要重写 |
start() | 启动线程的方法 |
sleep() | 线程休眠m毫秒的方法 |
join() | 优先执行调用join()方法的线程,抢占执行 |
Runnable接口
- 只有一个方法run();
- Runnable是java中用以实现线程的接口
- 任何实现线程功能的类都必须实现该接口
例子1(继承Thread类):
public class Threadprac1 {
public static void main(String[] args) {
Mythread mt = new Mythread();
mt.start();
}
}
class Mythread extends Thread {
public void run() {
System.out.println(getName() + "该线程正在运行");
}
}
例子1(继承Runable接口)
public class Thraedprac2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Mythread mt = new Mythread();
Thread mt1 = new Thread(mt);
mt1.start();
}
}
class Mythread implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
//获取当前线程名字
System.out.println(Thread.currentThread().getName()+"正在运行!");
}
}
线程的状态
- 新建(New)
- 可运行
- 正在运行
- 阻塞
线程的生命周期
sleep方法使用例子:
public class MyThread implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 1; i <= 30; i++) {
System.out.println(Thread.currentThread().getName() + "执行第" + i + "次");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MyThread mythread = new MyThread();
Thread t = new Thread(mythread);
Thread t1=new Thread(mythread);
t.start();
t1.start();
}
}
注意使用sleep方法需要捕获异常
join方法使用例子:
public class Mythread implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 1; i <=50; i++)
System.out.println(Thread.currentThread().getName() + "正在执行" + i + "次");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Mythread mt = new Mythread();
Thread t2 = new Thread(mt);
t2.start();
try {
t2.join();
//t2.join(1)
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (int i = 1; i <= 30; i++)
System.out.println("主线程执行第"+i+"次结束");
}
}
join方法就是先执行该线程
join(1)表示在执行1豪秒后会执行其他线程,
线程优先级
- java为线程提供了10个优先级
- 优先级可以用整数1-10表示,超过范围会抛出异常
- 主线程默认优先级为5
- 优先级常量
MAX_PARIORITY:线程的最高优先级10
MIN_PARIORITY:线程的最低优先级1
NORM_PRIORITY:线程的默认优先级5
调用方法:Thread.MAX_PARIORITY - 优先级相关的方法
方法 | 说明 |
---|---|
public int getPriority | 获取线程优先级的方法 |
public void setPriority(int newPriority) | 设置线程优先级的方法 |
线程同步问题
使用synchronized关键字实现线程同步