首页 > 代码库 > java线程理解002
java线程理解002
本章节主要是学习一种新的创建线程的方法,熟悉线程的常用方法,线程同步。
- 利用实现Runnable接口创建一个新的线程。
1 package interThread_v001; 2 3 public class Runable_v001 implements Runnable 4 5 { 6 // 线程体 7 8 public void run() 9 10 {11 for(int i=0; i<100; i++)12 {13 14 System.out.println("RunnableThread-->" +i);15 16 // 线程休眠,休眠结束后进入就绪状态,开始抢占Cpu17 18 if(i == 50)19 20 {21 try{22 Thread.sleep(2000);23 System.out.println("Sleeping 2000ms");24 25 }26 catch(Exception e){27 System.out.println(e);28 29 }30 }31 //让出线程资源-->CPU资源,但是会立马去抢占CPU32 if( i == 70)33 {34 Thread.yield();35 System.out.println("yield");36 }37 }38 }39 }
- 在主函数中先实例化接口实现类,后将该对象作为参数传入到Thread t = new Thread(对象);构造函数中。
1 package interThread_v001; 2 public class Runable_Test_v001 3 4 { 5 6 public static void main(String args[]) 7 8 { 9 10 // 先实例化Runnable的接口实现类11 12 Runable_v001 rv = new Runable_v001();13 14 // 直接用Thread实例化对象,并把Runnable的接口实现类对象作为参数传入15 16 Thread t = new Thread(rv);17 18 // 启动线程19 20 t.start();21 22 //设置线程为最大等级23 24 t.setPriority(Thread.MIN_PRIORITY);25 26 //获取当前线程的等级27 28 System.out.println("当前线程等级-->" +t.getPriority());29 30 //主线程中的执行方法 31 32 for(int i=0; i<100; i++)33 34 {35 System.out.println("mainThread-->" +i);36 }37 }38 }
线程的主要方法
线程同步
当有多个线程时,调用同一段线程体,有可能就会出现错误。
如何控制线程不出现错误,就要使用一个线程同步方法——同步代码块 synchronized(this){} ,使用该方法可以确保两个线程对象调用统一个线程体时,该线程体执行完之后才被第二个线程调用。
线程实现类:
1 package interThread_v001; 2 3 public class Sync_v001 implements Runnable 4 5 { 6 // 实现线程体 7 8 public void run() 9 10 {11 int i = 100;12 13 // 线程代码块14 15 while (true)16 17 {18 // 同步代码块19 synchronized (this)20 {21 22 // 获取当前线程的名字23 24 System.out.println(Thread.currentThread().getName() + "-->" + i);25 26 // i 自减27 28 i--;29 30 // 让出线程占用资源31 32 Thread.yield();33 34 // 退出while循环35 36 if (i < 0)37 38 {39 break;40 }41 }42 }43 }44 }
测试类:
1 package interThread_v001; 2 3 public class Sync_Testv001 4 5 { 6 7 public static void main(String args[]) 8 9 {10 11 // 接口实现类实例化对象12 13 Sync_v001 sThread1 = new Sync_v001();14 15 Sync_v001 sThread2 = new Sync_v001();16 17 18 19 // 实例化线程20 21 Thread t1 = new Thread(sThread1);22 23 Thread t2 = new Thread(sThread2);24 25 t1.setName("线程1");26 27 t2.setName("线程2");28 29 //启动线程30 31 t1.start();32 33 t2.start();34 35 }36 37 }
java线程理解002
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。