本周Java学习如下:
多线程学习:
package duoxiancheng; public class Music extends Thread{ @Override public void run() { for(int i=0;i<1000;i++) try { Thread.sleep(100); System.out.println("听音乐"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package duoxiancheng; public class Eat extends Thread{ @Override public void run() { for(int i=0;i<1000;i++) //间隔零点一秒 try { Thread.sleep(100); System.out.println("吃饭"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package duoxiancheng; public class Demo1 { /** * 听音乐 */ private static void music() { for(int i=0;i<1000;i++) System.out.println("听音乐"); } /** * 吃饭 */ private static void eat() { for(int i=0;i<1000;i++) System.out.println("吃饭"); } public static void main(String[] args) { /*music(); eat();*/ //多线程 /** * 利用多线程实现一边吃饭一边听音乐 */ Music musicThread=new Music(); Eat eatThread=new Eat(); musicThread.start(); eatThread.start(); } }
实现同时执行 吃饭和听音乐的操作
多线程的引入,使两个操作同时进行,有序。
package duoxiancheng; public class Demo3 implements Runnable{ @Override public void run() { // TODO Auto-generated method stub for(int i=0;i<10;i++) { // 获取当前线程 Thread t=Thread.currentThread(); System.out.println(t.getName()+":"+i); //返回线程名称 } } public static void main(String[] args) { Demo3 demo3=new Demo3(); Thread t1=new Thread(demo3); System.out.println("t1是否活动:"+t1.isAlive()); t1.start(); //检查线程是否是活动状态 System.out.println("t1是否活动:"+t1.isAlive()); } }
以上代码实现了返回线程的名称,并且检查线程的活动状态是否活动。
package duoxiancheng; public class Demo5 implements Runnable{ @Override public void run() { // TODO Auto-generated method stub for(int i=0;i<10;i++) { // 获取当前线程 Thread t=Thread.currentThread(); System.out.println(t.getName()+":"+i); //返回线程名称 } } public static void main(String[] args) { /** * 设置线程优先级 */ Demo5 demo5=new Demo5(); Thread t1=new Thread(demo5,"X 1"); Thread t2=new Thread(demo5,"Y 1"); Thread t3=new Thread(demo5,"Z 1"); t1.setPriority(Thread.MAX_PRIORITY); t2.setPriority(Thread.MIN_PRIORITY); t3.setPriority(Thread.NORM_PRIORITY); t1.start(); t2.start(); t3.start(); } }
实现线程的优先级,x优先级最大,z其次,y最小,程序按优先级由高到低执行。
package duoxiancheng; public class Demo6 implements Runnable{ @Override public void run() { // TODO Auto-generated method stub for(int i=0;i<10;i++) { try { Thread.sleep(100); // 获取当前线程 Thread t=Thread.currentThread(); System.out.println(t.getName()+":"+i); //返回线程名称 if(i==5) { System.out.println("线程礼让:"); Thread.currentThread().yield(); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String[] args) { Demo6 demo6=new Demo6(); new Thread(demo6,"a 1").start();; new Thread(demo6,"b 2").start(); } }
线程礼让:当a执行到5时先执行b,然后当b执行到5时先执行a。即执行到一定步骤,顺序会发生改变。