java 线程
来源:互联网 发布:java如何编译成class 编辑:程序博客网 时间:2024/05/16 05:52
线程的实现方式有三种:
继承Thread类实现线程;实现Runnable接口创建线程;以内部类的方式创建线程。
线程的启动是通过调用线程对象start()方法,线程运行是从run()方法开始,当线程的run()方法结束后,线程运行结束。
下面举一个用Thread类实现线程的方法:
从账户中取出cash,设定账户余额为5000,执行取出2500 和取出2600的操作
public class Account {
//账户余额
private int total = 0;
//构造函数
public Account(int save){
total = save;
}
//取现方法
public int getCash(int count){(1)
//public synchronized int getCash(int count){ (2)
if(count>total){
return -1;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
total = total - count;
return count;
}
public static void main(String[] args){
Account a = new Account(5000);
CashThread ct = new CashThread("银行卡",a, 2500);
CashThread ct1 = new CashThread("存折",a, 2600);
ct.start();
ct1.start();
}
}
public class CashThread extends Thread{
private String user;
private Account a;
private int count;
//构造函数
public CashThread(String user,Account a,int count){
this.user = user;
this.a = a;
this.count =count;
}
//重写run
public void run(){
int num = a.getCash(count);
System.out.println("从"+user+"取现:"+num);
try {
sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
当程序执行的是(1)语句
运行结果: 从存折取现:2600
从银行卡取现:2500
或
从银行卡取现:2500
从存折取现:2600
当程序执行(2)语句时
运行结果: 从存折取现:-1
从银行卡取现:2500
或
从银行卡取现:-1
从存折取现:2600
小结:1)运行结果会出现两种情况是因为线程是随机分配资源,有可能先分配给线程ct,也可能先分配给线程ct1。
2)运行(1)语句与运行(2)语句结果不同是由于“synchornized”,第一种账户只有5000却能取出2500+2600=5100,是因为线程没有同步,在(2)语句中加入synchornized,问题就会解决,实际上就是解决了线程同步的问题。
在java中,用synchornized关键字来实现互斥控制。 把一个单元声明为synchornized,就可以让在同一时间只有一个线程操作该方法。
附:当一个线程结束后,线程对象再次启动线程时必须重新创建新的线程对象。
- Java线程:什么是线程
- Java线程:线程池
- java线程--线程退出
- JAVA-线程/线程锁
- Java线程:什么是线程
- Java线程:线程中断
- Java线程:线程状态
- Java线程: 线程调度
- Java线程:线程交互
- java--线程--线程池
- java 线程
- Java线程
- java线程
- java线程
- Java线程
- Java线程
- java线程
- JAVA 线程
- 关于iOS 5 Could not instantiate class named NSLayoutConstraint错误
- stl的find、find_if简单demo
- 不弄微博 只想要积分下载
- C++中双冒号(::)和单冒号(:)的区别和作用
- 一个关于农历的算法----js实现【转】
- java 线程
- libjingle翻译之《Important Concepts(重要概念)之Signals (信号)》
- [第三次训练]Hard problem
- libjingle翻译之《关于libjingle》
- Bochs的配置与调试
- 大数据概念炒作周期模型
- libjingle翻译之《Important Concepts(重要概念)之Threads(线程)》
- iPhone开发进阶————利用ModalViewController切换View
- java学习(一) 变量