负数的进制转换程序 java判断正数转负数( 二 )


首先在Java中创建线程的方式有两种,之一种是继承Thread类然后复写run *** ,第二种方式是实现Runable接口并实现run ***。
继承Thread:
public class SaveMoney extends Thread {@Overridepublic void run() {System.out.println("存钱");}}public class GetMoney extends Thread {@Overridepublic void run() {System.out.println("取钱");}}public class BankTest {public static void main(String[] args) {SaveMoney saveMoneyThread = new SaveMoney();GetMoneygetMoneyThread= new GetMoney();saveMoneyThread.start();//启动线程,这里如果调用run是执行run *** 不是启动线程,需要注意getMoneyThread.start();}} 实现Runable接口:
public class SaveMoney implements Runable {public void run() {System.out.println("存钱");}}public class GetMoney implements Runable {public void run() {System.out.println("取钱");}}public class BankTest {public static void main(String[] args) {new Thread(new SaveMoney()).start();//启动线程,这里如果调用run是执行run *** 不是启动线程,需要注意new Thread(new GetMoney()).start();}} 下面就在JDK1.5之前和JDK1.5之后两种情况下结合银行取钱和存钱的例子来说明线程同步的问题
JDK1.5之前:
//首先创建一个用户帐户类public class BankAccont {private String accontName = "";private Double totalMoney = 0d;public BankAccont(String accontName, Double initMoney) {this.accontName = accontName;this.totalMoney = initMoney;}public void saveMoney(Double money) {this.totalMoney += money;System.out.println("存了" + money + "块钱");}public void getMoney(Double money) {this.totalMoney -= money;System.out.println("取了" + money + "块钱");}public String toString() {System.out.println(this.accontName + "总共还有" + this.totalMoney + "元人民币");}}//分别创建存钱和取钱的线程,使用实现Runable接口的方式这种方式可以轻松的让不同的线程执行相同的任务,除非程序员打算修改或增强类的基本行为,否则不应为该类(Thread)创建子类public class SavaMoney implements Runable {private BankAccont accont = null;public SaveMoney(BankAccont accont) {this.accont = accont;}public void run() {//这里使用同一个锁进行同步synchronized(BankAccont.class) {while(true) {this.accont.saveMoney(100);}}}} public class GetMoney implements Runable {private BankAccont accont = null;public GetMoney(BankAccont accont) {this.accont = accont;}public void run() {//这里使用同一个锁进行同步synchronized(BankAccont.class) {while(true) {this.accont.getMoney(100);}}}}public class BankTest {public static void main(String[] args) {BankAccont accont = new BankAccont("张三", 1000);new Thread(new SaveMoney(accont)).start();new Thread(new GetMoney(accont)).start();accont.toString();}} JDK1.5之后:
//首先创建一个用户帐户类public class BankAccont {private String accontName = "";private Double totalMoney = 0d;private final Lock lock = new RentrantLock();private final Condition condition_save = lock.newCondition();private final Condition condition_get= lock.newCondition();public BankAccont(String accontName, Double initMoney) {this.accontName = accontName;this.totalMoney = initMoney;}public void saveMoney(Double money) {lock.lock();condition_get.await();//这里引用不合适,只是一个示例this.totalMoney += money;System.out.println("存了" + money + "块钱");condition_get.signal();//这里引用不合适,只是一个示例lock.unlock();}public void getMoney(Double money) {lock.lock();condition_save.await();//这里引用不合适,只是一个示例this.totalMoney -= money;System.out.println("取了" + money + "块钱");condition_save.signal();//这里引用不合适,只是一个示例lock.unlock();}public String toString() {System.out.println(this.accontName + "总共还有" + this.totalMoney + "元人民币");}}//分别创建存钱和取钱的线程,使用实现Runable接口的方式这种方式可以轻松的让不同的线程执行相同的任务,除非程序员打算修改或增强类的基本行为,否则不应为该类(Thread)创建子类public class SavaMoney implements Runable {private BankAccont accont = null;public SaveMoney(BankAccont accont) {this.accont = accont;}public void run() {while(true) {this.accont.saveMoney(100);}}} public class GetMoney implements Runable {private BankAccont accont = null;public GetMoney(BankAccont accont) {this.accont = accont;}public void run() {while(true) {this.accont.getMoney(100);}}}public class BankTest {public static void main(String[] args) {BankAccont accont = new BankAccont("张三", 1000);new Thread(new SaveMoney(accont)).start();new Thread(new GetMoney(accont)).start();accont.toString();}} 以上只是一个简单的示例,需要根据需要进行修改 。在设计多线程程序的时候需要多考虑线程同步的问题(线程安全),在多线程中还有一个问题就是Java中有哪些线程安全的 *** ?
Java中线程安全的 *** 分别是Vector(向量,已经不常用了)、HashTable、Enumeration(枚举),除了这几个其余都为线程不安全 ***。StringBuffer和StringBuider的差别也是StringBuffer为线程安全,StringBuider为线程不安全 。


推荐阅读