首页 > 代码库 > java多线程编程

java多线程编程

参考书籍:Java多线程编程核心技术(高洪岩)

一、java多线程技能

  1.线程的启动

    • 进程:QQ.exe
    • 线程:QQ发一条消息由一个线程处理,QQ传输文件由一个线程处理
    • 创建线程:使用多线程的时候,代码运行结果与代码执行顺序和调用顺序是无关的。使用多线程的时候可能上一行的代码还没执行完,就执行了下一行代码。
      • 继承Thread类
 1 class A extends Thread {
 2     public void run(){
 3         //...
 4     }
 5 }
 6 public class Demo {
 7     public static void main(String[] args) {
 8         A a = new A();
 9         a.start();
10     }
11 }
      • 实现Runnable接口
 1 class A implements Runnable{
 2     public void run() {
 3         //...
 4     }
 5 }
 6 public class Demo {
 7     public static void main(String[] args) {
 8         A a = new A();
 9         Thread t = new Thread(a);
10         t.start();
11     }
12 }
    • 多线程访问同一资源避免非线程安全问题(使用synchronized修饰)
public class Mythread extends Thread {
    
    private int count = 5;
    
    @Override
    synchronized public void run() {
        super.run();
        count--;
                System.out.println("由"+this.currentThread().getName()+"计算,count="+count);
    }
}

public class Test {
    public static void main(String[] args) {
        try {
            Mythread thread = new Mythread();
            Thread a = new Thread(thread,"A");
            Thread b = new Thread(thread,"B");
            Thread c = new Thread(thread,"C");
            Thread d = new Thread(thread,"D");
            Thread e = new Thread(thread,"E");
            a.start();
            b.start();
            c.start();
            d.start();
            e.start();
         } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
    • 常用方法
public class Test {
    public static void main(String[] args) {
        try {
            Thread.currentThread();//返回代码段正在被哪个线程调用的信息
            Thread.currentThread().getName();//获取当前线程的名称
            Thread.currentThread().isAlive();//当前线程是否处于活跃状态
            Thread.sleep(1000);//让线程休眠1秒
            Thread.currentThread().getId();//获取当前线程的唯一标识
            Thread.currentThread().interrupt();//停止当前线程(此方法只是打一个停止线程的标记,并非真正停止线程,线程会继续执行)
            Thread.currentThread().interrupted();//测试当前线程是否已经中断,同时清除该中断状态
            Thread.currentThread().isInterrupted();//测试当前线程是否已经中断,只是测试,不做其他处理
            Thread.currentThread().stop();//弃用的方法,直接停止线程,使一些请理性工作无法完成,同时解锁锁定的对象,不能保证数据一致
            Thread.currentThread().suspend();//弃用的方法,暂停线程,使用此方法可能会造成对公共对象的独占,使其他线程无法访问公共同步对象
            Thread.currentThread().resume();//弃用的方法,继续暂停的线程
            Thread.currentThread().setPriority(10);//设置优先级,1 <= x <= 10;
            Thread.currentThread().yield();//放弃当前cpu资源,让给其他任务去独占cpu
         } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

 

   2.如何使线程暂停

   3.如何使线程停止

   4.线程的优先级

   5.线程安全相关的问题

java多线程编程