首页 > 代码库 > java多线程编程
java多线程编程
参考书籍:Java多线程编程核心技术(高洪岩)
一、java多线程技能
1.线程的启动
-
- 进程:QQ.exe
- 线程:QQ发一条消息由一个线程处理,QQ传输文件由一个线程处理
- 创建线程:使用多线程的时候,代码运行结果与代码执行顺序和调用顺序是无关的。使用多线程的时候可能上一行的代码还没执行完,就执行了下一行代码。
- 继承Thread类
1 class A extends Thread { 2 public void run(){ 3 //... 4 } 5 } 6 public class Demo { 7 public static void main(String[] args) { 8 A a = new A(); 9 a.start(); 10 } 11 }
-
-
- 实现Runnable接口
-
1 class A implements Runnable{ 2 public void run() { 3 //... 4 } 5 } 6 public class Demo { 7 public static void main(String[] args) { 8 A a = new A(); 9 Thread t = new Thread(a); 10 t.start(); 11 } 12 }
-
- 多线程访问同一资源避免非线程安全问题(使用synchronized修饰)
public class Mythread extends Thread { private int count = 5; @Override synchronized public void run() { super.run(); count--; System.out.println("由"+this.currentThread().getName()+"计算,count="+count); } } public class Test { public static void main(String[] args) { try { Mythread thread = new Mythread(); Thread a = new Thread(thread,"A"); Thread b = new Thread(thread,"B"); Thread c = new Thread(thread,"C"); Thread d = new Thread(thread,"D"); Thread e = new Thread(thread,"E"); a.start(); b.start(); c.start(); d.start(); e.start(); } catch (Exception e) { e.printStackTrace(); } } }
-
- 常用方法
public class Test { public static void main(String[] args) { try { Thread.currentThread();//返回代码段正在被哪个线程调用的信息 Thread.currentThread().getName();//获取当前线程的名称 Thread.currentThread().isAlive();//当前线程是否处于活跃状态 Thread.sleep(1000);//让线程休眠1秒 Thread.currentThread().getId();//获取当前线程的唯一标识 Thread.currentThread().interrupt();//停止当前线程(此方法只是打一个停止线程的标记,并非真正停止线程,线程会继续执行) Thread.currentThread().interrupted();//测试当前线程是否已经中断,同时清除该中断状态 Thread.currentThread().isInterrupted();//测试当前线程是否已经中断,只是测试,不做其他处理 Thread.currentThread().stop();//弃用的方法,直接停止线程,使一些请理性工作无法完成,同时解锁锁定的对象,不能保证数据一致 Thread.currentThread().suspend();//弃用的方法,暂停线程,使用此方法可能会造成对公共对象的独占,使其他线程无法访问公共同步对象 Thread.currentThread().resume();//弃用的方法,继续暂停的线程 Thread.currentThread().setPriority(10);//设置优先级,1 <= x <= 10; Thread.currentThread().yield();//放弃当前cpu资源,让给其他任务去独占cpu } catch (Exception e) { e.printStackTrace(); } } }
2.如何使线程暂停
3.如何使线程停止
4.线程的优先级
5.线程安全相关的问题
java多线程编程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。