线程的实现
1.在java中,线程的实现有两种:
继承Thread类
实现Runnable接口
2.Thread类 : 必须重写run()方法
定义格式:
class className extends Thread{
run(){};
}
3.Runnable接口 :
public class MyRunnable implements Runnable{ private String name; public MyRunnable(String name){ this.name = name; } @Override public void run() { for (int i = 0; i < 1000; i++) { System.out.println(name+":"+i); } }
public class ThreadDemo { public static void main(String[] args) { /* MyThread t1 = new MyThread("A"); MyThread t2 = new MyThread("B"); t1.start(); t2.start();*/ MyRunnable r1 =new MyRunnable("A"); MyRunnable r2 =new MyRunnable("B"); Thread t1 = new Thread(r1); Thread t2 = new Thread(r2); t1.start(); t2.start();
线程的状态
创建状态:准备好了一个多线程的对象
就绪状态:调用了start()方法,等待CPU进行调度
运行状态:执行run()方法
阻塞状态:暂时停止执行,可能将资源交给其他程序使用
终止状态(死亡状态):线程销毁
线程的常用方法
1.取得线程名称 : getName()
2.取得当前线程对象 :currentThread()
3.判断线程是否启动:isAlive()
4.线程的强行运行:join()
5.线程的休眠 :sleep()
class RunnableDemo implements Runnable{ private String name; public RunnableDemo(String name){ this.name = name; } @Override public void run() { for (int i = 0; i < 50; i++) { try { //4.线程的休眠 Thread.sleep(1000); System.out.println(name +":"+i); } catch (InterruptedException e) { e.printStackTrace(); } //1.取得线程对象名称 // System.out.println("当前线程对象:"+Thread.currentThread().getName()); } } } public class ThreadDemo { public static void main(String[] args) { RunnableDemo r1 =new RunnableDemo("A"); Thread t1 = new Thread(r1); //2.判断线程是否启动 // System.out.println(t1.isAlive()); t1.start(); // System.out.println(t1.isAlive()); //3.线程的强行执行 /* for (int i = 0; i < 50; i++) { if (i >10) { try { t1.join(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("主线程"+i); } */ } }
线程同步
1.同步代码块 : 在代码块上加上“synchronized”关键字
2.同步代码块格式: synchronized(同步对象){
需要同步的代码块
}
3.同步方法: 除了代码块可以同步,方法也是可以同步的
4.方法同步格式:
synchrionized void 方法名称(){
}
线程的生命周期