真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java程序代碼示例 java的程序代碼

Java中的同步——示例程序

前面說到了Java中的同步問題 下面通過一個小小的實例程序來演示Java中的同步方法 其中對前文提到的Counter類做了稍微的修改

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序設(shè)計、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了費縣免費建站歡迎大家使用!

public class Counter {

private int c = ;

public void increment() {

System out println( before increment c = + c);

c++;

try {

Thread sleep( );

} catch (InterruptedException e) {

e printStackTrace();

}

System out println( after increment c = + c);

}

public? void decrement() {

System out println( before decrement c = + c);

c ;

try {

Thread sleep( );

} catch (InterruptedException e) {

e printStackTrace();

}

System out println( after decrement c = + c);

}

public int value() {

return c;

}

}

在上面的Counter類的實現(xiàn)中 分別對increment和decrement方法中增加了sleep( )的調(diào)用 這樣做的目的是為了放大兩個線程對同一對象的方法調(diào)用時的交錯效果

下面是兩個線程 在ThreadA中調(diào)用了 次increment()方法 在ThreadB中調(diào)用了 次decrement()方法

Thread

public class ThreadA implements Runnable {

private Counter c;

public ThreadA(Counter c) {

this c = c;

}

@Override

public void run() {

for (int i = ; i ; i++) {

this c increment();

}

}

}

ThreadB

public class ThreadB implements Runnable {

private Counter c;

public ThreadB(Counter c) {

this c = c;

}

@Override

public void run() {

for (int i = ; i ; i++) {

this c decrement();

}

}

}

主程序如下 其中生成了兩個線程threadA和ThreadB 他們共享Counter c

public class Main {

public static void main(String[] args) {

Counter c = new Counter();

ThreadA a = new ThreadA(c);

ThreadB b = new ThreadB(c);

Thread threadA = new Thread(a);

Thread threadB = new Thread(b);

threadA start();

threadB start();

}

}

執(zhí)行上面的代碼 可能的結(jié)果如下

before increment c =

before decrement c =

after increment c =

before increment c =

after decrement c =

before decrement c =

after increment c =

before increment c =

after decrement c =

before decrement c =

after increment c =

before increment c =

after decrement c =

before decrement c =

after increment c =

before increment c =

after decrement c =

before decrement c =

after increment c =

before increment c =

after decrement c =

before decrement c =

after increment c =

before increment c =

after increment c =

before increment c =

after decrement c =

before decrement c =

after decrement c =

before decrement c =

after increment c =

before increment c =

after increment c =

before increment c =

after decrement c =

before decrement c =

after increment c =

after decrement c =

before decrement c =

after decrement c =

從上面的輸出結(jié)果中我們不難看出出現(xiàn)了嚴重的交錯現(xiàn)象! 在increment或者是decrement方法中輸出before和after本應(yīng)該是成對連續(xù)出現(xiàn)的 但輸出結(jié)果卻不是如此

將上面代碼的increment()和decrement()方法用synchronized 修飾后 重新運行該程序 輸出結(jié)果如下

before increment c =

after increment c =

before increment c =

after increment c =

before decrement c =

after decrement c =

before increment c =

after increment c =

before decrement c =

after decrement c =

before decrement c =

after decrement c =

before decrement c =

after decrement c =

before decrement c =

after decrement c =

before increment c =

after increment c =

before decrement c =

after decrement c =

before decrement c =

after decrement c =

before decrement c =

after decrement c =

before decrement c =

after decrement c =

before increment c =

after increment c =

before decrement c =

after decrement c =

before increment c =

after increment c =

before increment c =

after increment c =

before increment c =

after increment c =

before increment c =

after increment c =

before increment c =

after increment c =

這樣輸出結(jié)果和沒有增加synchronized修飾符時的大不相同 單獨一次的increment和decrement方法并沒有出現(xiàn)交錯的現(xiàn)象 只是連續(xù) 次的increment()和decrement ()有交錯(這個不是synchronized能解決的問題)

至少 我們從上面的實例程序中可以看到synchronized方法的作用了

lishixinzhi/Article/program/Java/hx/201311/26369

采用抽象或接口方式設(shè)計一個面向?qū)W生的Java課程學(xué)分管理程序?

下面是采用抽象類方式設(shè)計一個面向?qū)W生的Java課程學(xué)分管理程序的示例代碼:

// 定義抽象類

Student

public abstract class Student {

// 學(xué)生姓名

protected String name;

// 學(xué)生學(xué)號

protected String studentNumber;

// 學(xué)生已修課程學(xué)分總和

protected double totalCredits;

// 構(gòu)造方法

public Student(String name, String studentNumber) {

this.name = name;

this.studentNumber = studentNumber;

this.totalCredits = 0;

}

// 抽象方法,用于計算學(xué)生的當(dāng)前學(xué)分績點

public abstract double calculateGPA();

// 普通方法,用于增加學(xué)生的已修課程學(xué)分

public void addCredits(double credits) {

this.totalCredits += credits;

}

// 普通方法,用于獲取學(xué)生的姓名

public String getName() {

return this.name;

}

// 普通方法,用于獲取學(xué)生的學(xué)號

public String getStudentNumber() {

return this.studentNumber;

}

// 普通方法,用于獲取學(xué)生的已修課程學(xué)分總和

public double getTotalCredits() {

return this.totalCredits;

}

}

下面是采用接口方式設(shè)計一個面向?qū)W生的Java課程學(xué)分管理程序的示例代碼:

// 定義接口Student

public interface Student {

// 學(xué)生姓名

String name = "";

// 學(xué)生學(xué)號

String studentNumber = "";

// 學(xué)生已修課程學(xué)分總和

double totalCredits = 0;

// 抽象方法,用于計算學(xué)生的當(dāng)前學(xué)分績點

double calculateGPA();

// 抽象方法,用于增加學(xué)生的已修課程學(xué)分

void addCredits(double credits);

//抽象方法,用于獲取學(xué)生的姓名

String getName();

// 抽象方法,用于獲取學(xué)生的學(xué)號

String getStudentNumber();

// 抽象方法,用于獲取學(xué)生的已修課程學(xué)分總和

double getTotalCredits();

}

在上面的代碼中,我們使用了抽象類和接口兩種方式來設(shè)計學(xué)生的Java課程學(xué)分管理程序。抽象類的方式可以在類中包含普通的成員變量和方法,而接口的方式則只能包含抽象方法。根據(jù)需要,可以選擇使用抽象類或接口來設(shè)計學(xué)生的Java課程學(xué)分管理程序。

希望這對你有幫助!望采納!

java十進制轉(zhuǎn)二進制代碼怎么解決?

下面是根據(jù)十進制數(shù)轉(zhuǎn)二進制數(shù)的算法所寫的一段Java程序示例代碼:

import java.math.BigDecimal;

public class Test {

public static void main(String[] args) {

Test t = new Test();

double d = 8;

String s = t.decimal2BinaryStr(d);

System.out.println("十進制數(shù)"+d+"轉(zhuǎn)成二進制數(shù)為:"+s);

}

/**

* 十進制數(shù)轉(zhuǎn)二進制數(shù)

* @param d 十進制數(shù)

* @return 十進制數(shù)轉(zhuǎn)換成二進制的字符串

*/

public String decimal2BinaryStr(double d){

String result = decimal2BinaryStr_Inte(d);

result += decimal2BinaryStr_Deci(d);

return result;

}

/**

* 十進制整數(shù)部分轉(zhuǎn)二進制數(shù)

* @param d 十進制數(shù)

* @return 十進制整數(shù)部分轉(zhuǎn)換成二進制的字符串

*/

public String decimal2BinaryStr_Inte(double d){

// ? ? ?return Integer.toBinaryString((int)d);

/*

* 本來利用上面的Integer.toBinaryString(int)就可以得到整數(shù)部分的二進制結(jié)果,

* 但為了展示十進制轉(zhuǎn)二進制的算法,現(xiàn)選擇以下程序來進行轉(zhuǎn)換

*/

String result = "";

long inte = (long)d;

int index = 0;

while(true){

result += inte%2;

inte = inte/2;

index++;

if(index%4 == 0){

result+=" ";

}

if(inte==0){

while(index%4!=0){

result+="0";

index++;

}

break;

}

}

char[] c = result.toCharArray();

char[] cc = new char[c.length];

for(int i=c.length; i0; i--){

cc[cc.length-i] = c[i-1];

}

return new String(cc);

}

/**

* 十進制小數(shù)部分轉(zhuǎn)二進制

* @param d 十進制數(shù)

* @return 十進制小數(shù)部分轉(zhuǎn)換成二進制小數(shù)的字符串

*/

public String decimal2BinaryStr_Deci(double d){

return decimal2BinaryStr_Deci(d, 0);

}

/**

* 十進制小數(shù)部分轉(zhuǎn)二進制

* @param d 十進制數(shù)

* @param scale 小數(shù)部分精確的位數(shù)

* @return 十進制小數(shù)部分轉(zhuǎn)換成二進制小數(shù)的字符串

*/

public String decimal2BinaryStr_Deci(double d, int scale){

double deci = sub(d,(long)d);

if(deci==0){

return "";

}

//為了防止程序因所轉(zhuǎn)換的數(shù)據(jù)轉(zhuǎn)換后的結(jié)果是一個無限循環(huán)的二進制小數(shù),因此給其一個默認的精確度

if(scale==0){

scale = (String.valueOf(deci).length()-2)*4;

}

int index = 0;

StringBuilder inteStr = new StringBuilder();

double tempD = 0.d;

while(true){

if(deci==0 || index==scale){

while(index%4!=0){

inteStr.append("0");

index++;

}

break;

}

if(index==0){

inteStr.append(".");

}

tempD = deci*2;

inteStr.append((int)tempD);

deci = sub(tempD ,(int)tempD);

index++;

if(index%4 == 0){

inteStr.append(" ");

}

}

return inteStr.toString();

}

/**

* 提供精確的減法運算。

* @param v1 被減數(shù)

* @param v2 減數(shù)

* @return 兩個參數(shù)的差

*/

public static double sub(double v1, double v2) {

BigDecimal b1 = new BigDecimal(Double.toString(v1));

BigDecimal b2 = new BigDecimal(Double.toString(v2));

return b1.subtract(b2).doubleValue();

}

}

例如將十進制數(shù)1234.5轉(zhuǎn)成二進制數(shù)為:0100 1101 0010.1000


網(wǎng)站題目:java程序代碼示例 java的程序代碼
文章位置:http://weahome.cn/article/dddhdps.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部