在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

浅谈Java多线程

2017-2-7 13:40| 发布者: zhangjf| 查看: 472| 评论: 0

摘要: Java中多线程涉及下面4点 创建单线程:继承Tread类 和 实现Rannable接口; 多线程使用:手动实例化多个线程 或者 使用线程池 ExecutorService; 多线程共享数据同步:可以采用同步synchronized执行run方法中的 ...
Java中多线程涉及下面4点 创建单线程:继承Tread类 和 实现Rannable接口; 多线程使用:手动实例化多个线程 或者 使用线程池 ExecutorService; 多线程共享数据同步:可以采用同步synchronized执行run方法中的操作; 合理使用多线程同步数据,防止死锁问题。


1.创建线程 继承Tread类
  1. public class MyThread extends Thread {
  2. public void run() {
  3. System.out.println(Thread.currentThread().getName());
  4. }
  5. public static void main(String[] args) {
  6. //不能共享数据
  7. //MyThread myThread = new MyThread();
  8. //能共享数据
  9. Thread myThread = new Thread(new MyThread());
  10. myThread.start();
  11. }
  12. }
复制代码

实现Rannable接口

  1. public class MyThread implements Runnable {
  2. public void run() {
  3. System.out.println(Thread.currentThread().getName());
  4. }
  5. public static void main(String[] args) {
  6. //能共享数据
  7. Thread myThread = new Thread(new MyThread());
  8. myThread.start();
  9. }
  10. }
复制代码
上面写了两种创建线程的例子,注意:注释内容。 2.多线程使用 手动实例化自定义的线程类
  1. public class MyThread implements Runnable {
  2. public void run() {
  3. System.out.println(Thread.currentThread().getName());
  4. }
  5. public static void main(String[] args) {
  6. MyThread myThread = new MyThread();
  7. new Thread(myThread).start();
  8. new Thread(myThread).start();
  9. new Thread(myThread).start();
  10. }
  11. }
复制代码

使用线程池 ExecutorService

  1. public class MyThread implements Runnable {
  2. public void run() {
  3. System.out.println(Thread.currentThread().getName());
  4. }
  5. public static void main(String[] args) {
  6. ExecutorService pool = Executors.newCachedThreadPool();
  7. MyThread myThread = new MyThread();
  8. for(int i = 0; i < 3; i++){
  9. pool.execute(myThread);
  10. }
  11. //关闭线程池
  12. pool.shutdown();
  13. }
  14. }
复制代码
3.多线程共享数据同步 一个简单卖票代码:3个卖票员,共卖100张门票,买一张票耗时100毫秒。
  1. import java.util.concurrent.ExecutorService;
  2. import java.util.concurrent.Executors;
  3. public class MyThread implements Runnable {
  4. private int tickets = 100;
  5. private synchronized void sale() {
  6. if (tickets > 0) {
  7. System.out.println(Thread.currentThread().getName() + " 剩余:"
  8. + (--tickets) + "张票");
  9. try {
  10. Thread.sleep(100);
  11. } catch (InterruptedException e) {
  12. e.printStackTrace();
  13. }
  14. } else{
  15. Thread.currentThread().stop();
  16. }
  17. }
  18. public void run() {
  19. while(true){
  20. sale();
  21. }
  22. }
  23. public static void main(String[] args) {
  24. ExecutorService pool = Executors.newCachedThreadPool();
  25. MyThread myThread = new MyThread();
  26. for (int i = 0; i < 3; i++) {
  27. pool.execute(myThread);
  28. }
  29. pool.shutdown();
  30. }
  31. }
复制代码




4.死锁 当线程之间互相等待共享资源时,会产生死锁问题。我们可以在多线程的程序中减少同步关键字的使用,减少每一次占用资源的时间之类的措施来降低死锁出现的可能性。




来自: http://my.oschina.net/chenhao901007/blog/476377

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-9 04:08

Copyright 2015-2025 djqfx

返回顶部