疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java多线程从简单到复杂


 

 1 输出数字

  (1) 多线程操作全局变量任务

  package c;

  /**

  * (1) 多线程操作全局变量任务

  * 2013-12-14 21:49:17

  *

  *

  */

  public class MyThread implements Runnable

  {

  private static int i=0;

  public MyThread(){

  }

  @Override

  public void run(){

  i++;

  System.out.println("i="+i);

  }

  }

  (2) 为这个任务开三个线程

  private static void testImport3() {

  MyThread imp=new MyThread();

  Thread t;

  for(int i=0;i<3;i++){//开3个线程

  t=new Thread(imp);

  t.start();

  }

  }

  (3) 输出结果

  i=2

  i=3

  i=2

  2 同步

  避免一个数字拿出来处理前被另一个线程拿出来,两个线程处理之后返回了同一种结果(本应该

  是两种)

  (1) 加锁

  package c;

  import java.util.concurrent.locks.Lock;

  import java.util.concurrent.locks.ReentrantLock;

  /**

  * @author ZTX

  * (1) 多线程操作全局变量

  * 2013-12-14 21:49:17

  * (2) 同步

  * 2013-12-14 22:12:19

  *

  */

  public class MyThread implements Runnable

  {

  private static int i=0;

  public MyThread(){

  }

  private static Lock lock=new ReentrantLock();

  @Override

  public void run(){

  lock.lock();

  try {

  i++;

  System.out.println("i="+i);

  } catch (Exception e) {

  e.printStackTrace();

  }finally{

  lock.unlock();

  }

  }

  }

  (2)增加线程数验证同步

  private static void testImport3() {

  MyThread imp=new MyThread();

  Thread t;

  for(int i=0;i<30;i++){//开3个线程

  t=new Thread(imp);

  t.start();

  }

  }

  (3)输出结果

  i=1

  i=2

  i=3

  i=4

  i=5

  i=6

  i=7

  i=8

  i=9

  i=10

  i=11

  i=12

  i=13

  i=14

  i=15

  i=16

  i=17

  i=18

  i=19

  i=20

  i=21

  i=22

  i=23

  i=24

  i=25

  i=26

  i=27

  i=28

  i=29

  i=30

  3

  4

  5