美文网首页
JavaForAndroid15

JavaForAndroid15

作者: tah | 来源:发表于2018-04-24 10:00 被阅读3次

    进程与线程
    一、线程的执行过程


    线程的执行过程.png

    二、实现线程的两种方法
    1、定义一个线程类,需继承Thread类
    class FirstThread extends Thread {
    //必须重写run方法,该方法称为线程体
    public void run () {
    for (int i=0;i<100;i++){
    System.out.println("FirstThread-->"+i);
    }
    }
    }
    class Test {
    public static void main(String args[]) {
    //生成一个线程类的对象
    FirstThread ft = new FirstThread();
    //使用start方法启动线程
    ft.start();//ft线程处于就绪状态
    //ft.run();不能这样运行
    for (int i=0;i<100;i++){
    System.out.println("mainThread-->"+i);
    }
    }
    }

    2、实现Runnable接口
    class RunnableImpl implements Runnable {
    public void run(){
    for (int i=0;i<100;i++){
    System.out.println("Runnable-->"+i);
    }
    }
    }
    class Test {
    public static void main(String args[]) {
    //生成一个Runnable接口实现类的对象
    RunnableImpl ri= new RunnableImpl();
    //生成一个Thread对象,并将Runnable接口实现类的对象作为参数,传递给Thread对象
    Thread t = new Thread(ri);
    //使用start方法启动线程
    t.start();//ft线程处于就绪状态
    for (int i=0;i<100;i++){
    System.out.println("mainThread-->"+i);
    }
    }
    }

    三、线程的控制方法
    中断线程
    Thread.sleep(); //线程休眠,参数为毫秒,需要捕获异常,结束后线程进入就绪状态
    Thread.yield(); //自动让出CPU,然后和其他线程一起再次抢占CPU
    设置线程的优先级,最大是10,最小是1
    getPriority();
    setPriority();
    Thread t = new Thread(ri);
    t.setPriority(Thread.MAX_PRIORITY); //设置最大优先级 10
    t.setPriority(Thread.MIN_PRIORITY); //设置最小优先级 1

    五、多线程数据安全
    class MyThread implements Runnable {
    int i = 100;
    public void run(){
    while(true){
    synchronized(this){ //同步锁,this为锁住的对象,this可以是其他对象
    //获取当前代码运行的线程
    System.out.println(Thread.currentThread().getName()+i);
    i--;
    Thread.yield();
    if(i<0){
    break;
    }
    }
    }
    }
    }
    class Test {
    public static void main(String args[]) {
    MyThread ri= new MyThread();
    //生成两个Thread对象,这两个Thread公用同一个线程体
    Thread t1 = new Thread(ri);
    Thread t2 = new Thread(ri);
    t1.setName("线程a");
    t2.setName("线程b");
    t1.start();
    t2.start();
    }
    }
    注:如果一个线程获得了一个对象的同步锁,那么这个对象上所有其他同步的代码都是不能被其他线程执行,都需要等待同步锁释放后才能被执行。

    同步方法
    public synchronized void fun1(){
    //同步方法锁住的对象是this
    }

    相关文章

      网友评论

          本文标题:JavaForAndroid15

          本文链接:https://www.haomeiwen.com/subject/eoqacftx.html