线程

package projict05;

/*一:继承java.lang.Thread类
1.步骤:
(1) 声明线程类,继承Thread
(2)重写run方法
(3)创建对象
(4)启动线程 start()
*/

public class test27 {
    public static void main(String[] args) {
        //只有Thread类有start方法
        MyThread my=new MyThread();
        my.start();
        
        MyThread my1=new MyThread();
        my1.start();
        

        
    }
    
}

class MyThread extends Thread{
    @Override
    public void run() {
        for(int i=2;i<=100;i+=2) {
            System.out.println("偶数 "+i);
        }
    }
    
    
}
package projict05;

/*二:实现java.lang.Runnable类接口
 * 1.步骤
 * (1)声明线程类,实现Runnable接口
 * (2)重写run()
 * (3)创建线程对象
 * (4)启动:必须借用Thread类的start启动
 * */
public class test28 {
    public static void main(String[] args) {
        MyRunnable my=new MyRunnable();
        
        Thread thread=new Thread(my);
        thread.start();
                
        Thread thread2=new Thread(my);
        thread2.start();
        
    }
    
}

class MyRunnable implements Runnable{
    @Override
    public void run() {
        for(int i=2;i<=100;i+=2) {
            System.out.println("偶数 "+i);
        }
    }
    
    
}
package projict05;

import org.junit.Test;



/*
 (一)线程的生命周期
1.出生(new)
2.就绪(start)
3.运行
去向:
(1)回到就绪:
   A:时间一到,回到就绪
   B:yield()
 (2)死亡
   A:异常,还未处理
   B:run()正常结束
 (3)阻塞
  A:遇到耗时
  B:sleep()
  C:wait()
  D:join()
  E:等待锁
 4.阻塞  去向:就绪
  A:遇到耗时----》耗时的操作准备好了
  B:sleep()----》醒了
  C:wait()----》wait条件排除
  D:join()----》加到前面的线程结束了
  E:等待锁----》释放锁
 5.死亡:结束

 * 方法:
1.getName()
2. 静态方法:Thread.currentThread()
3.getPriority()
4.静态方法:Thread.sleep()
5.join():让出资源
main 2
Thread-0 2
Thread-0 4
Thread-0 6
Thread-0 8
Thread-0 10
main 4
main 6
main 8
main 10
6.静态方法:Thread.yield():抢夺资源
main 2
Thread-0 2
main 4
Thread-0 4
main 6
Thread-0 6
main 8
main 10
Thread-0 8
Thread-0 10


JAVA 一共有10个优先等级1~10
Thread类一共定义三个基本优先等级,影响被调度的概率
MIN_PRIORITY:1
NORM_PRIORITY:5
MAX_PROORITY:10

*/
public class test30 {
    
    @Test
    public void test03() throws InterruptedException  {
        MyThread1 t1=new MyThread1();
        t1.start();
        
        for(int i=2;i<=10;i+=2) {
            if (i==4) {
                t1.yield();//抢夺资源
            }
            System.out.println(Thread.currentThread().getName()+" "+i);//Thread-0
        }
        
        
        
    }
    
    @Test
    public void test02() throws InterruptedException  {
        MyThread1 t1=new MyThread1();
        t1.start();
        
        for(int i=2;i<=10;i+=2) {
            if (i==4) {
                t1.join();//线程被t1线程阻塞了
            }
            System.out.println(Thread.currentThread().getName()+" "+i);//Thread-0
        }
        
        
        
    }
    
    
    @Test
    public void test01() {
        MyThread1 t=new MyThread1();
        t.start();
        System.out.println(t.getName());//Thread-0
        System.out.println(Thread.currentThread().getName());//main
        System.out.println(t.getPriority());//5
    }

}


class MyThread1 extends Thread{
    @Override
    public void run() {
        for(int i=2;i<=10;i+=2) {
            System.out.println(Thread.currentThread().getName()+" "+i);//Thread-0
        }
    }
    
    
}

 

posted on 2020-05-25 19:20  happygril3  阅读(149)  评论(0)    收藏  举报

导航