Java创建多线程的两种方式
2015-08-30 23:01
399 查看
示例代码1:
示例代码2:
/** * Thread的常用方法: * 1.start():启动线程并执行相应的run()方法 * 2.run():子线程要执行的代码放入run()方法中 * 3.currentThread():静态的,调取当前的线程 * 4.getName():获取此线程的名称 * 5.setName():设置此线程的名称 * 6.yield():调用此方法的线程释放当前CPU的执行权,但是下一个抢到CPU执行权的可能还是此线程,也可能是其他线程 * 7.join():在A线程中调用B线程的join()方法, * 表示:当执行到此方法,A线程停止执行,直至B线程执行完毕,A线程再接着join()之后的代码执行 * 8.isAlive():判断当前线程是否存活 * 9.sleep(long l):显式的让当前线程睡眠l毫秒 * 10.线程通信:wait() notify() notifyAll() * * 设置线程的优先级: * getPriority():返回线程优先级 * setPriority(int newPriority):改变线程的优先级 * 说明:默认优先级为Thread.NORM_PRIORITY,即5,优先级越高表明抢到资源的概率越大 */ /* * 创建一个子线程,完成1-100之间自然数的输出。同样的主线程执行同样的操作。 * 创建多线程的第一个方式:继承java.lang.Thread类。 */ //1.创建一个继承Thread的子类 class SubThread extends Thread {//alt+shift+s->Override/Implement Methods //2.重写Thread类的run()方法,方法内实现此线程要完成的功能 @SuppressWarnings("static-access") @Override public void run() { for (int i = 1; i <= 100; i++) { /*try { Thread.currentThread().sleep(100); } catch (InterruptedException e) { e.printStackTrace(); }*/ System.out.println(Thread.currentThread().getName()+":"+ +Thread.currentThread().getPriority()+":"+i); } } } public class TestThread { @SuppressWarnings("static-access") public static void main(String[] args) { //3.创建一个子类的对象 SubThread st1 = new SubThread(); st1.setName("线程1"); st1.setPriority(Thread.MAX_PRIORITY); SubThread st2 = new SubThread(); st1.setName("线程2"); st1.setPriority(Thread.NORM_PRIORITY); //4.调用线程的start()方法:①启动此线程;②调用相应的run()方法。 //说明:一个线程只能执行一次start()方法 //st.run();//错误:只调用了run()方法,但是此线程还未启动 st1.start(); st2.start(); for (int i = 1; i <= 100; i++) { if(i % 10 == 0) { Thread.currentThread().yield(); } System.out.println(Thread.currentThread().getName()+":"+ +Thread.currentThread().getPriority()+":"+i); if(i == 55) { try { st1.join(); } catch (InterruptedException e) { e.printStackTrace(); } } } System.out.println("st1.isAlive():"+st1.isAlive());//false //匿名类创建线程 new Thread(){ @Override public void run() { for (int i = 0; i < 100; i++) { if(i % 2 == 0) { System.out.println(Thread.currentThread().getName()+":"+i); } } } }.start(); } }
示例代码2:
/* * 创建多线程的第二个方式:实现Runnable接口。 * * 继承的方式 VS 实现的方式 * 1.联系:public class Thread implements Runnable ,不管哪种方法,本质上都是实现Runnable接口 * 2.哪种方式好?实现的方式优于继承的方式 * why? ①避免了java单继承的局限性 * ②如果多个线程要操作一份资源(或数据),更适合使用实现的方式 * */ //1.创建一个实现了Runnable接口的类 class PrintNum implements Runnable { //2.实现接口的抽象方法 @Override public void run() { //子线程执行的代码 for (int i = 0; i < 100; i++) { if(i % 2 == 0) { System.out.println(Thread.currentThread().getName()+":"+i); } } } } public class TestThread2 { public static void main(String[] args) { //3.创建一个Runnable接口实现类的对象 PrintNum p = new PrintNum(); //4.将此对象作为形参传递给Thread类的构造器中,创建Thread类的对象,此对象即为一个线程 Thread t1 = new Thread(p); Thread t2 = new Thread(p); //5.调用start()方法:启动线程并执行run() t1.start(); t2.start(); } }
相关文章推荐
- Java-课程表
- java界面设计(swing)
- 【J2SE视频】-JDK安装
- java中的单例模式
- 06---Java基础、面向对象
- java基础 数组的增添改查
- springMVC学习笔记(二)-----注解和非注解入门小程序
- 探索Java反射机制
- Java依赖注入库框架 Dagger的源码分析(一)
- Java ConcurrentHashMap 的理解
- Java版本的删除指定目录及子目录下名叫“xxx.txt”的所有文件
- java中的final关键字
- java web开发
- java异常处理——基础篇
- Java中常用注解
- java教程
- java基础 求素数
- Java LruCache
- JAVA问题总结之20--可变长度形参
- java IO流文件的读写具体实例