设为首页 加入收藏

TOP

Java多线程从简单到复杂
2014-11-23 22:09:59 来源: 作者: 【 】 浏览:11
Tags:Java 线程 简单 复杂

1 输出数字


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


package c;
/**
* @author ZTX
* (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


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Ruby on Rails 和 Laravel: 入门 下一篇C语言 迷宫问题(堆栈及其应用)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: