深度解析线程工作原理
1, 线程的概念
一个程序中的方法有几条执行路径, 就有几个线程
2, 线程的创建
两种方式:
1, 继承Thread
class TestThread extends Thread {......}
2, 实现Runnable接口, 然后作为参数传入到Thread类的构造方法中
class TestThread implements Runnable {......}
线程的启动:
调用线程类中的start()方法, 不能直接调用run()方法, 直接调用run()方法那叫方法调用, 不是启动线程
3, 线程常用方法
isAlive()
判断线程是否还活着, 调用start()之前和终止之后都是死的, 其他的都是活的
interrupt()
停止线程
getPriority()
setPriority(int i)
设置优先级, 优先级的概念: 谁的优先级高, 谁执行的时间就多
Thread里面的默认优先级:
Thread.MIN_PRIORITY = 1
Thread.MAX_PRIORITY = 10
Thread.NORM_PRIORITY = 5
Thread.sleep(1000); 将程序暂定一会
join() 合并线程
yield() 让出CPU执行其他线程
4, 线程同步
synchronized
线程同步解析:
package com.maya.sync.deadlock; public class TestPractise implements Runnable { private int b = 100; public synchronized void m1() { b = 1000; try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("m1: " + b); } public synchronized void m2() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } b = 2000; } public void run() { m1(); } public static void main(String[] args) { TestPractise tp = new TestPractise(); Thread t = new Thread(tp); t.start(); tp.m2(); // 两个方法都修改了同一个值, 这两个方法都应该加上synchronized System.out.println("main: " + tp.b); } /* 先执行m2,再执行m1 * 一条记录, 加锁是应该加在改的方法上还是读的方法上 */ }