多线程创建的两种方式和线程同步问题实例
2012-12-30 21:30
295 查看
问题一:线程创建的两种方式:
问题二:线程同步问题
package jsj.java.exam.test08; import java.util.Date; /** * 模拟左右手写字。 * * 请完善程序。 */ public class Multithreading { public static void main(String[] args) { // 创建LeftThread 线程 //Thread left = ________081________;//2 Thread left=new LeftThread(); // 用 RightThread 创建线程 //Thread right = new Thread(________082________);//2 Thread right = new Thread(new RightThread()); // 修改线程名称 left.setName("左手线程"); right.setName("右手线程"); // TODO 启动两个线程 //________083________;//1 //________084________;//1 left.start(); right.start(); } } //class LeftThread extends ________085________ {//2 class LeftThread extends Thread { public void run() { for(int i=0; i<10; i++) { System.out.println("我是左手线程"); } } } //class RightThread implements ________086________ {//2 class RightThread implements Runnable { public void run() { for(int i=0; i<10; i++) { System.out.println("我是右手线程"); } } }
问题二:线程同步问题
package p2.v3; /*模拟夫妻提款的操作,未使用同步*/ public class HusbandAndWifeStory { public static void main(String[] args) { BankAccount bankAccount = new BankAccount(3000); WithDraw withdraw = new WithDraw(bankAccount); Thread husband = new Thread(withdraw); Thread wife = new Thread(withdraw); husband.setName("HUSBAND"); wife.setName(" WIFE"); husband.start(); wife.start(); System.out.println("最后银行账户还剩:"+bankAccount.getBalance()); } } class BankAccount { private int balance; public BankAccount(int balance) { this.balance=balance; } // 查询余额 public int getBalance() { return balance; } // 取款 public void withdraw(int amount) { balance = balance - amount; } } class WithDraw implements Runnable { private BankAccount account; public WithDraw(BankAccount account) { this.account = account; } @Override public void run() {// withdDraw();// } private synchronized void withdDraw(){// System.out.println(Thread.currentThread().getName()+"得到了账户的控制权——开始");// if (account.getBalance() < 2000) { System.out.println(Thread.currentThread().getName() + "在查询时,钱透支了,不够了"); } else { System.out.println(Thread.currentThread().getName()+"在查询时,余额为"+account.getBalance()); System.out.println(Thread.currentThread().getName() + "准备从账户上取走2000"); try { System.out.println(Thread.currentThread().getName() + "准备休息"); Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "醒来"); account.withdraw(2000); System.out.println(Thread.currentThread().getName() + "完成提款"); System.out.println("现在账户上还剩" + account.getBalance() + "元"); } System.out.println(Thread.currentThread().getName()+"释放了账户的控制权——结束"); } }
相关文章推荐
- 多线程--创建线程两种方式实例
- Java 中的多线程-两种创建方式,定时器的应用,线程的安全问题可以用银行转账来说明
- 1多线程的概述2多线程(创建多个线程实例,并启动多个线程)的实现方式,main主方法是单线程的4多线程的实现方式5多线程模拟火车站售票出现问题7线程的声明周期
- 黑马程序员—多线程的两种创建方式与多线程安全问题
- 多线程——用创建线程的两种方式分别解决经典窗口卖票问题
- 多线程的安全问题。 创建线程的两种方式区别
- Java创建多线程的两种方式对比
- java多线程总结一:线程的两种创建方式及优劣比较
- java多线程总结一: 线程的两种创建方式及优劣比较
- 多线程的四种创建方式--前两种不常用
- java多线程总结一: 线程的两种创建方式及优劣比较
- 多线程基础:两种常见的创建线程的方式
- Java创建多线程的两种方式
- 多线程的创建两种方式和区别
- 多线程:初识线程,以及创建线程的两种方式
- 黑马程序员——JAVA基础之简述多线程,两种创建多线程的方式
- java多线程总结一:线程的两种创建方式及优劣比较
- kvm与virsh两种创建虚拟机方式的一些问题
- Java多线程的两种实现方式的区别以及同步问题中的锁对象深刻解析
- java多线程的两种创建方式