JAVA中来实现并发访问方式 二
实现Runnable接口
其实在第一种方法中:Thread也是实现了Runnable接口
public class Thread extends Object implements Runnable
线程是程序中执行的线程。 Java虚拟机允许应用程序同时执行多个执行线程。
每个线程都有优先权。 具有较高优先级的线程优先于优先级较低的线程执行。 每个线程可能也可能不会被标记为守护程序。 当在某个线程中运行的代码创建一个新的Thread对象时,新线程的优先级最初设置为等于创建线程的优先级,并且当且仅当创建线程是守护进程时才是守护线程。
线程1:
public class Test implements Runnable{ @Override public void run() { //优先级:设定优先级,必须在RUN()方法的开头设置。或者生成启动前设置 Thread.currentThread().setPriority(Thread.MAX_PRIORITY); for(int i=0;i<10;i++) { System.out.println(Thread.currentThread()+":"+i); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }
线程2:
public class Test1 implements Runnable { @Override public void run() { for(int i=0;i<10;i++) { System.out.println(Thread.currentThread()+":"+i); } } }
线程3:main方法在此只调用线程1,2;
public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); new Thread(new Test()).start(); new Thread(new Test1()).start(); }结果:
方法详解:
Thread.sleep(100):函数在未来的1000毫秒内我不想再参与到CPU竞争。那么1000毫秒过去之后,这时候也许另外一个线程正在使用CPU,那么这时候操作系统是不会重新分配CPU的,直到那个线程挂起或结束;况且,即使这个时候恰巧轮到操作系统进行CPU 分配,那么当前线程也不一定就是总优先级最高的那个,CPU还是可能被其他线程抢占去。
注: 加断点线程中,逐步执行不能实现多线程,因为断点干预线程抢执行资源。
线程优先级:线程的最低优先级=1;线程的默认优先级=5;线程的最高优先级=10;
:线程的级别决定那个线程先被执行,但是也不一定因为存在sleep()函数;