多线程1
1 判断单线程:在程序中如果能用一条线穿过所有调用方法,就是单线程
2 setPriority方法设置高优先级和低优先级,只是线程执行可能概率不同,不是等一个线程执行完后另一个线程才执行
package lianxi1; class SubThread extends Thread{ public void run(){ for(int i=1;i<=50;i++){ try { Thread.currentThread().sleep(100); //显示的让线程睡眠0.1s,使当前线程暂停,不丢失控制权; //由于等待,抢不过主线程,即使有yield方法,仍然先执行主线程 //再执行子线程。 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"-"+Thread.currentThread().getPriority()+" "+i); } } } public class TestThread { public static void main(String[] args) { SubThread sub = new SubThread(); sub.setName("子线程"); sub.setPriority(Thread.MIN_PRIORITY); sub.start(); Thread.currentThread().setName("主线程"); for(int i=1;i<=50;i++){ System.out.println(Thread.currentThread().getName()+"-"+Thread.currentThread().getPriority()+" "+i); if(i%10==0){ Thread.currentThread().yield(); // yield方法暂停当前执行的线程,转到其他线程 } // if(i%10==0){ // try { // sub.join(); //等待该线程终止,直到该子线程执行完,主线程才执行 // } catch (InterruptedException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } } System.out.println(sub.isAlive()); } }
结果:
主线程-5 1
主线程-5 2
主线程-5 3
主线程-5 4
主线程-5 5
主线程-5 6
主线程-5 7
主线程-5 8
主线程-5 9
主线程-5 10
主线程-5 11
主线程-5 12
主线程-5 13
主线程-5 14
主线程-5 15
主线程-5 16
主线程-5 17
主线程-5 18
主线程-5 19
主线程-5 20
主线程-5 21
主线程-5 22
主线程-5 23
主线程-5 24
主线程-5 25
主线程-5 26
主线程-5 27
主线程-5 28
主线程-5 29
主线程-5 30
主线程-5 31
主线程-5 32
主线程-5 33
主线程-5 34
主线程-5 35
主线程-5 36
主线程-5 37
主线程-5 38
主线程-5 39
主线程-5 40
主线程-5 41
主线程-5 42
主线程-5 43
主线程-5 44
主线程-5 45
主线程-5 46
主线程-5 47
主线程-5 48
主线程-5 49
主线程-5 50
true
子线程-1 1
子线程-1 2
子线程-1 3
子线程-1 4
子线程-1 5
子线程-1 6
子线程-1 7
子线程-1 8
子线程-1 9
子线程-1 10
子线程-1 11
子线程-1 12
子线程-1 13
子线程-1 14
子线程-1 15
子线程-1 16
子线程-1 17
子线程-1 18
子线程-1 19
子线程-1 20
子线程-1 21
子线程-1 22
子线程-1 23
子线程-1 24
子线程-1 25
子线程-1 26
子线程-1 27
子线程-1 28
子线程-1 29
子线程-1 30
子线程-1 31
子线程-1 32
子线程-1 33
子线程-1 34
子线程-1 35
子线程-1 36
子线程-1 37
子线程-1 38
子线程-1 39
子线程-1 40
子线程-1 41
子线程-1 42
子线程-1 43
子线程-1 44
子线程-1 45
子线程-1 46
子线程-1 47
子线程-1 48
子线程-1 49
子线程-1 50
浙公网安备 33010602011771号