java多線程作業

多線程

一、判斷題(T爲正確,F爲錯誤),每題1
1.如果線程死亡,它便不能運行。(T
2.Java中,高優先級的可運行線程會搶佔低優先級線程。(T
3.線程可以用yield方法使低優先級的線程運行。(F
4...程序開發者必須創建一個線程去管理內存的分配。(F
5.一個線程在調用它的start方法,之前,該線程將一直處於出生期。( T
6.當調用一個正在進行線程的stop( )方法時,該線程便會進入休眠狀態。(F
7.一個線程可以調用yield方法使其他線程有機會運行。(T

8. 多線程沒有安全問題(F)

9. 多線程安全問題的解決方案可以使用Lock提供的具體的鎖對象操作(T)

10. Stop()方法是終止當前線程的一種狀態(T)

 

二、選擇題(不定項選擇題),每題2
1.Java語言中提供了一個▁D線程,自動回收動態分配的內存。
A.異步
B.消費者
C.守護
D.垃圾收集
2.Java語言避免了大多數的▁C錯誤。
A.數組下標越界
B.算術溢出
C.內存泄露
D.非法的方法參數
3.有三種原因可以導致線程不能運行,它們是▁ACD
A.等待
B.阻塞
C.休眠
D.掛起及由於I/O操作而阻塞
4.▁A方法終止時,能使線程進入死亡狀態。
Arun
BsetPrority//更改線程優先級
Cyield//暫停當前線程的執行  執行其他線程
Dsleep//線程休眠
5.▁B方法可以改變線程的優先級。
Arun
BsetPrority
Cyield
Dsleep
6.線程通過▁C▁方法可以使具有相同優先級線程獲得處理器。
Arun
BsetPrority
Cyield
Dsleep
7.線程通過▁▁D方法可以休眠一段時間,然後恢復運行。
Arun
BsetPrority
Cyield
Dsleep
8.方法resume( )負責重新開始▁▁線程的執行。
A.被stop( )方法停止
B.被sleep( )方法停止
C.被wait( )方法停止
D.被suspend( )方法停止
9.▁▁D方法可以用來暫時停止當前線程的運行。
Astop( )
Bsleep( )
Cwait( )
Dsuspend( )

10. 請問下列哪些類是定義在java.io包中的抽象類(ABCEF)

A. InputStream

B. OutputStream

C. PrintStream

D. Reader

E. FileInputStream

F. FileWriter

 

三、簡述題,每題5
1.簡述程序、進程和線程之間的關係?什麼是多線程程序?

線程是依賴於進程存在的

進程:系統調用分配資源的一種方式(如打開一個應用)

一般存在多個進程,提高CPU的使用率

線程相當於進程中的任務,線程的執行具有隨機性;在分別搶佔CPU的執行權,提高程序的效率;


3.什麼是線程調度?Java的線程調度採用什麼策略?

在單個Cpu以某種順序運行多個多個線程,是一種優先級的搶先式調度
4.如何在Java程序中實現多線程?

1:通過Thread類繼承Thread

2:實現Runable接口

3:線程池利用Executors工廠類來進行ExecutorService對象的創建

5. 試簡述Thread類的子類或實現Runnable接口兩種方法的異同?

實現Runable接口更符合java設計思想(數據分離原則)

 

6. 說明緩衝流的優點和原理

緩衝流的特點是速度快。如果只是節點流進行數據的傳輸的話,需要一個字節一個字節的傳輸。而緩衝流和節點流同時進行的話速度就快的很多,那是因爲節點流每傳輸n個字節就會打上標記,再去傳輸後面的n個字節,在節點流傳輸後面的n個字節時,緩衝流傳輸第一次傳輸的n個字節,所以速度明顯要快。

8:Javawait()sleep()方法的不同?

Wait()是需要喚醒的,sleep在一段時間後自動喚醒

9:JavaRunnableCallable有什麼不同?

它們的主要區別是Callablecall() 方法可以返回值和拋出異常,而Runnablerun()方法沒有這些功能。Callable可以返回裝載有計算結果的Future對象

.

 

四、程序設計題
1.編寫一個應用程序,在線程同步的情況下來實現生產者消費者問題。

2.修改上題,由於各個線程是異步運行的,因此無法預計其相對速度,爲了使生產者能夠不斷地生產,可以使用循環緩衝區,保證有足夠多的內存區保存更多的產品。(生產者——倉庫——消費者)

 

 

3 :

1)將若干個Student對象;若干個Teacher對象,寫出到d:/0404/a.txt,

  2)將該文件中所有的Student對象反序列化回來,裝入List,所有的Teacher對象反序列化回來裝入另一個List

package Homework;

 import java.io.Serializable;

public class Person implements Serializable {

private static final long serialVersionUID = 1L;

private String name;

private String sex; private int age;

 public String getName() {

 return name;

}

public void setName(String name) { t

his.name = name;

}

public String getSex() {

return sex;

} public void setSex(String sex) {

this.sex = sex;

 } public int getAge() {

return age;

} public void setAge(int age) { t

his.age = age;

}

 public String toString() {

return "Person [name=" + name + ", sex=" + sex + ", age=" + age + "]";

}

public Person(String name, String sex, int age) { super();

 this.name = name;

this.sex = sex;

this.age = age;

} public Person() {

super();

} }

學生類

package Homework;

  public class Student extends Person {

     public Student(String name,String sex,int age){

        super(name, sex, age);

}     

public Student(){}    

    public String toString() {

         return "Student [getName()=" + getName() + ", getSex()=" + getSex() + ", getAge()=" + getAge() + "]";

    }  

  }

老師類

package Homework;

public class Teacher extends Person {

 public Teacher(String name,String sex,int age){

super(name, sex, age);

}

public Teacher(){}

 public String toString() {

return "Teacher [getName()=" + getName() + ", getSex()=" + getSex() + ", getAge()=" + getAge() + "]";

}

}

測試類

package Homework;

import java.io.File;

import java.io.FileInputStream;

Import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.util.ArrayList;

 public class Test1and2 {

   public static void main(String[] args) {

    File file=new File("Instance"); file.mkdirs();

     File file2=new File(file,"a.txt");

      ObjectOutputStream oos=null;

       ObjectInputStream ois=null;

        try {

         file2.createNewFile();

          oos=new ObjectOutputStream(new FileOutputStream(file2));

          oos.writeObject(new Student("李四","",20));

          oos.writeObject(new Student("李四2","",45));

          oos.writeObject(new Student("李四3","",38));

          oos.writeObject(new Teacher("張三","",13));

          oos.writeObject(new Teacher("張三","",50));

          oos.writeObject(new Teacher("張三","",34));

          oos.flush();

          List ois=new ObjectInputStream(new FileInputStream(file2));

         ArrayList<Student> list=new ArrayList<>();

         ArrayList<Teacher> list2=new ArrayList<>();

        for(int i=0;i<6;i++){

        if(i<=2){

         Student student=(Student)ois.readObject();

        list.add(student);

         }else {

      Teacher teacher=(Teacher)ois.readObject();

    list2.add(teacher);

}

 }

        for (Student student : list) {

      System.out.println(student);

 }

     for (Teacher teacher : list2) {

 System.out.println(teacher);

 }

}  catch (IOException e) {

    catch block e.printStackTrace();

 } catch (ClassNotFoundException e) {

 e.printStackTrace();

 }finally { if(ois!=null){

try { ois.close();

 } catch (IOException e) {

 e.printStackTrace();

 }

 } if(oos!=null){

try { oos.close();

 } catch (IOException e) {

 e.printStackTrace();

}

 

}

 

}

 

}

 

}

 

4:實現字符串和字節數組之間的相互轉換,比如:將字符串西部開源技術中心xbkyjszx”轉換爲字節數組,並將字節數組再轉換回字符串!

public class Test

{

public static void main(String[] args) throws IOException

{

String contents = " 西部開源技術中心";

System.out.println(contents);

//String---byte []

byte[] buf = contents.getBytes();

//byte[]----String

String contents2 = new String(buf, 0, buf.length);

System.out.println(contents2);

} 

 

5:Java編程一個會導致死鎖的程序,你將怎麼解決?請你設計

public class DieLock extends Thread {

private boolean flag ;

public DieLock(boolean flag){

this.flag = flag ;

}

public void run() {

if(flag){

synchronized(MyLock.objA){

System.out.println("if objA");

synchronized (MyLock.objB) {

System.out.println("if objB");

}

}

}else {

//dl2

synchronized (MyLock.objB) {

System.out.println("else objB");

synchronized(MyLock.objA){

System.out.println("else objA");

}

}

}

}

}

public class DieLockDemo {

public static void main(String[] args) {

DieLock dl1 = new DieLock(true) ;

DieLock dl2 = new DieLock(false);

dl1.start() ;

dl2.start() ;

}

}

public class MyLock {

public static final Object objA = new Object() ;

public static final Object objB = new Object() ;

}

 

 

6:遞歸實現輸入任意目錄,列出文件以及文件夾

package work1;

import java.io;

import java.util.Scanner;

 

public class test{

public static void main(String[] args) {

System.out.print("please input content:");

Scanner con=new Scanner (System.in);

String c= con.nextLine();

con.close();

listtest(c);

 

}

 

private static void listtest(String path) {

// TODO

File file = new File(path);

File[] files = file.listFiles();

for(File f : files){

if(f.isDirectory()){

System.out.println(f);

listtest(f.getPath());

}else{

System.out.println(f);

}

}

 

 

}

 

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章