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);

}

}

 

 

}

 

}

 

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