当前位置:文档之家› 多线程练习题目

多线程练习题目

多线程练习题目
多线程练习题目

多线程

一、单项

1.下述哪个选项为真?( )

A.Error类是一个RoutimeException异常

B.任何抛出一个RoutimeException异常的语句必须包含在try块之内

C.任何抛出一个Error对象的语句必须包含在try块之内

D. 任何抛出一个Exception异常的语句必须包含在try块之内

2.下列关于Java线程的说法哪些是正确的?( )

A.每一个Java线程可以看成由代码、一个真实的CPU以及数据3部分组成

B.创建线程的两种方法,从Thread类中继承的创建方式可以防止出现多父类问题

C.Thread类属于java.util程序包

D.以上说法无一正确

3.哪个关键字可以对对象加互斥锁?( )

A.transient

B.synchronized

C.serialize

D.static

4.下列哪个方法可用于创建一个可运行的类?()

A.public class X implements Runable { public void run() {……} }

B. public class X implements Thread { public void run() {……} }

C. public class X implements Thread { public int run() {……} }

D.public class X implements Runable { protected void run() {……} }

5.下面哪个选项不会直接引起线程停止执行?( )

A.从一个同步语句块中退出来

B.调用一个对象的wait方法

C.调用一个输入流对象的read方法

D.调用一个线程对象的setPriority方法

6.使当前线程进入阻塞状态,直到被唤醒的方法是( )

A.resume()方法

B.wait()方法

C.suspend()方法

D.notify()方法

7.运行下列程序,会产生的结果是( )

public class X extends Thread implements Runnable {

public void run(){

System.out.println(“this is run()”);

}

public static void main(String[] args)

{

Thread t=new Thread(new X());

t.start();

}

}

A.第一行会发生编译错误

B. 第六行会发生编译错误

C.第六行会发生运行错误

D.程序会运行和启动

https://www.doczj.com/doc/135962887.html,ng.ThreadGroup类的作用为( )

A.使任何类都可以为线程提供线程体

B.定义了线程与交互的方法

C.提供了线程组或组中的每个线程进行操作的方法

D.以上都不是

9.实现线程的创建有( )方法

A.一种B. 两种 C.三种 D.四种

10.一个进程可以包含( )个线程

A.一

B. 二

C. 三

D.四

11.Java中的线程模型包含( )

A.一个虚拟处理机

B.CPU执行的代码

C.代码操作的数据

D.以上都是

12.关于线程组以下说法错误的是( )

A.在应用程序中线程可以独立存在,不一定要属于某个线程

B.一个线程只能创建时设置其线程组

C.线程组由https://www.doczj.com/doc/135962887.html,ng包中的ThreadGroup类实现

D.线程组使一组线程可以作为一个对象进行统一处里或维护

13.下列定义线程方法正确的是( )

A.Public Thread();

B.Public Thread(Runnable target);

C.Public Thread(ThreadGroup group,Runnable target);

D.以上都正确

14.以下不属于Thread类提供的线程控制方法是( )

A.break()

B.sleep()

C.yield()

D.join()

15.下列关于线程的说法正确的是( )

A.线程就是进程

B.线程在操作系统出现后就产生了

C.Soloris是支持线程的操作系统

D.在单处理器和多处理器上多个线程不可以并发执行

16.下列不属于线程生命周期状态的是( )

A. 新建状态

B.可运行状态

C. 运行状态

D.解锁状态

17.以下不属于Thread类的线程优先级静态常量的是( )

A.MIN_PRIORITY

B.MAX__PRIORITY

C.NORM__PRIORITY

D.BEST__PRIORITY

18.( )关键字可以对对象加互斥锁。

A.synchronized

B.transient

C.serialize

D.static

19.下列( )方法和resume()方法相互搭配,使线程停止执行,然后调用resume()方法恢复线程。

A.interrupt()

B.stop()

C.suspend()

D.yield()

20.Thread类的方法中,getName()方法的作用是( )

A.返回线程组的名称

B.设置线程组的名称

C.返回线程的名称

D.设置线程的名称

21.线程调用了sleep()方法后,该线程将进入( )状态

A.可运行状态

B.运行状态

C.阻塞状态

D.终止状态

22.下列( )类或接口定义了线程同步与交互的方法。

A.Thread

B.Runnable

C.Object

D.ThreadGroup

23.Java中线程是由线程类的( )方法定义的。

A.init()

B.run()

C.application()

D.main()

24.线程控制方法中,stop()的作用是( )

A.强行终止线程

B.使比其低的优先级线程运行

C.只让给同优先级运行

D.返回当前线程的引用

25.在以下( )情况下,线程就进入可运行状态。

A.线程调用了sleep()方法时

B.线程调用了join()方法时

C.线程调用了yield()方法时

D.以上都是

26.下列说法中,正确的一项是()

A.单处理机的计算机上,2个线程实际上不能并发执行

B.单处理机的计算机上,2个线程实际上能够并发执行

C.一个线程可以包含多个进程

D.一个进程可以包含多个线程

27.下列说法中错误的一项是()

A.线程就是程序

B.线程是一个程序的单个执行流

C.多线程是指一个程序的多个执行流

D.多线程用于实现并发

28.下列关于Thread类的线程控制方法的说法中错误的一项是()

A.线程可以通过调用sleep()方法使比当前线程优先级的线程运行

B.线程可以通过调用yield()方法和当前线程优先级一样的线程运行

C.线程sleep()方法调用结束后,该线程进入运行状态

D.若没有相同优先级的线程处于可运行状态,县城调用yield()方法时,当前线程将继续执行

30.下列哪一个操作不能使线程从等待阻塞状态进入对象锁阻塞状态?

A.等待阻塞状态下的线程被notify()唤醒

B.等待阻塞状态下的线程被interrput()中断

C.等待时间到

D.等待阻塞状态下的进程调用wait()方法

31.下列哪一个方法可以使线程从运行状态进入其他阻塞状态?

A. sleep()

B. wait()

C. yield()

D. start()

32.下列哪一个不属于Java线程模型的组成部分?

A.虚拟的CPU

B.虚拟CPU执行的代码

C.代码所操作的数据

D.执行流

B.输出“INTERRUPTED”

C.输出“DONE WAITING”

D.编译通过,但是不输出任何字符串

34.下列哪一种情况一定不会使当前的线程暂停执行?()

A.该线程抛出一个InterruptedException

B.该线程调用sleep()方法

C.该线程创建一个新的子线程

D.该线程从输入流读取文件数据

35.下列说法中错误的一项是()

A.Java中的每一个线程都属于某个线程组

B.线程只能在其创建时设置所属的线程组

C.线程创建之后,可以从一个线程组转移到另一个线程组

D.新建的线程组默认情况下属于其父线程所属的线程组

36.下列不属于线程组成部分的一项是()

A. 程序计数器

B. 堆栈

C. 进程地址空间中的代码 C. 栈指针

37.下列关于Java线程模型的说法中,错误的一项是()

A.Java线程模型包括了计算机的CPU

B.代码可以与其他线程共享

C.数据可以被多个线程共享

D.线程模型在https://www.doczj.com/doc/135962887.html,ng.Thread类中被定义

38.下列关于Thread类提供的线程控制方法的说法中,错误的一项是()

A.在线程a中执行线程b的join()方法,则线程a等待直到b执行完成

B.线程a通过调用interrupt()方法来中断其阻塞状态

C.若线程a调用方法isAlive()返回值为true,则说明a正在执行中

D.currentThread()方法返回当前线程的引用

39.下面的哪一个关键字通常用来对对象加锁,从而使得对对象的访问是排他的?()

A. serialize

B. transient

C. synchronized

D. static

40.下列说法中错误的一项是()

A.可串行化的类必须实现Serializable接口

B.可串行化的类中的静态变量可以不被串行化

C.private数据访问权限能够限制数据不被串行化

D.对象串行化使用Java语言提供的默认机制

41.下列说法中正确的一项是()

A.代码和数据是进程的组成部分

B.代码和数据是线程的组成部分

C.进程是轻型线程

D.线程中包含进程

42.下列说法中错误的一项是()

A.共享数据的所有访问都必须使用synchronized加锁

B.共享数据的访问不一定全部使用synchronized加锁

C.所有的对共享数据的访问都是临界区

D.临界区必须使用synchronized标识

43.下列有关线程的叙述中正确的一项是()

A.一旦一个线程都创建,它就立即开始运行

B.使用start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行

C.当一个线程因为抢占机制而停止运行时,它被放在课运行队列的前面

D.一个线程可能因为不同的原因停止并进入终止状态

44.下列方法中,不属于Thread类提供的线程控制方法的一个是()

A. sleep()

B. interrupt()

C. init()

D. yield()

45.实现Runnable接口创建一个线程的语句是()

Thead t = new Thead (target)

Thead t = new Thead ();

t.target=target

Thead t = new Thead ();

T.start(target)

Thead t = new Thead ();

T.run(target)

Thead类定义与下列哪一个包中?()

A. java.io

B. https://www.doczj.com/doc/135962887.html,ng

C. java.util

D. java.awt

46.下列说法中,错误的一项是()

A.实现了Runnable接口的类,可以通过extends来继承其他的类

B.实现了Runnable接口的类,不能继承其他的类

C.Thread类的子类应该是关于CPU行为的类

D.Thread类的子类也实现了Runnable接口

47.下列是通过实现Runnable接口创建的类,其中正确的一项是()

A. class A3 implements Runnable

{

void run()

{

//··········

}

}

B. class A3 extends Runnable

{

public void run()

{

//··········

}

}

C. class A3 implements Runnable

{

public void run()

{

//··········

}

}

D. class A3 implements Runnable

{

//··········

}

48.Thread类的常量NORM_PRIORITY代表的优先级是()

A.最低优先级

B.普通优先级

C.最高优先级

D.不代表任何优先级

50.下列哪一个包给出了Runnable接口的定义?()

A. java.util

B. java.io

C. https://www.doczj.com/doc/135962887.html,ng

D. java.sql

二、填空题

1.线程模型在Java中是由________类进行定义和描述的。

2.多线程是Java程序的______机制,它能共享同步数据,处理不同事件。

3.Java的线程调度策略是一种基于优先级的_________。

4.当线程完成运行并结束后,将不能再运行。除线程正常运行结束外,还可用其他方法控制其停止。可以用_______方法强行终止线程。

5.如果一个线程处于______态,那么这个线程是不能运行的。

6.提供线程体的特定对象是在创建线程时指定的,创建线程对象是通过_____类的构造方法实现的。

7.在Java中,新建的线程调用start()方法,将使线程的状态从New(新建状态)转换为_____。

8.按照线程的模型,一个具体的线程是由虚拟的CPU、代码与数据组成,其中代码与数据构成了_______,现成的行为由它决定。

9.Thread类的方法中,toString()方法的作用是________。

10.线程是一个_____级的实体,线程结构驻留在用户空间中,能够被普通的相应级别方法直接访问。

11.线程是由表示程序运行状态的组成的。

12.在Java线程模型中,一个线程是由、和三部分组成

的。

13.Thread类中表示最高优先级的常量是,而表示最低优先级的常量

是。

14.若要获得一个线程的优先级,可以使用方法,若要修改一个线程的优先

级,则可以使用方法。

15.在Java语言中临界区使用关键字标识。

16.线程的生命周期包括新建状态、运行状态、和终止状态。

17.Java语言使用技术对共享数据操作进行并发控制。

18.进程是由、数据、内核状态和组成的。

19.在Java线程模型中,数据和代码之间的关系是的。

20.线程中方法使执行线程放弃CPU并释放原来持有的对象锁,进入对象的

wait等待池中。

三、判断题

1.一旦一个线程被创建,它就可以立即开始运行( )

2.调用start()方法可以使一个线程成为可运行的,但是它并不能立即开始执行( )

3.主线程不具有默认优先级( )

4.Java中线程的优先级从低到高以整数0—9表示( )

5. 从一个同步语句块中退出来不会直接引起线程停止执行( )

6.线程的阻塞是指暂停一个线程的执行以等待某个条件发生( )

7.优先级只能在线程启动前设置( )

8.当生成守护线程的线程结束时,此守护线程会随之消失( )

9.线程之间的通信可以通过共享数据使线程互相交流,也可以通过线程控制方法使线程互相等待( )

10.Object类定义了线程同步与交互的方法 ( )

11.线程一旦被创建,则自动运行( )

12.线程创建后需要调用start()方法,将线程置于可运行状态( )

13.Thread类中没有定义run()方法( )

14.线程开始运行时,是从start()方法开始运行的( )

15.一个进程可以创建多个线程( )

16.代表优先级的常数值越大优先级越低( )

17.程序中可能出现一种情况:多个线程相互等待对方持有的锁,而在得到对方的锁之前都不

会释放自己的锁,这就是死锁。( )

18.临界区可以是一个语句块,但是不可以是一个方法( )

19.释放锁的时候,应该按照加锁顺序的逆序进行( )

20.在对象串行化中,可以用来保护类中敏感信息的关键字是protected ( )

四、简答题(回答要点,并简明扼要作解释)10

1.什么是线程?它和进程有什么区别?

2.简述线程的生命周期。

3.Runnable接口中包括哪些抽象方法?Thread类有哪些主要域和方法?

4.创建线程有几种方式?试写出使用这些方式创建线程的一般模式。为什么有时候必须采用其中一种方式?

5.简述线程的同步控制机制。

6.创建线程有哪两种方法?

7.什么是死锁?

8.线程有哪三种基本状态?这几种状态是怎样相互转换的?(可画图表示)

9.Java语言中的线程包括哪三部分?

10.什么是进程?与线程有何区别?

五、程序设计题

1.编写一个多线程类,该类的构造方法调用Thread类带字符串参数的构造方法。建立自己的线程名,然后随机生成一个休眠时间,再将自己的线程名和休眠多长时间显示出来。该线程运行后,休眠一段时间,该时间就是在构造方法中生成的时间。最后编写一个测试类,创建多个不同名字的线程,并测试其运行情况。

2.编写一个程序,测试异常。该类提供一个输入整数的方法,使用这个方法先输入两个整数,再用第一个整数除以第二个整数,当第二个整数为0时,抛出异常,此时程序要捕获异常。

3.编写一个用线程实现一个数字时钟的应用程序。该线程类要采用休眠的方式,把绝对大部分时间让系统使用。

4.编写一个使用继承Thread类的方法实现多线程的程序。该类有两个属性,一个字符串代表线程名,一个整数代表该线程要休眠的时间。线程执行时,显示线程名和休眠时间。

5.应用继承类Thread的方法实现多线程类,该线程3次休眠若干(随机)毫秒后显示线程名和第几次执行。

6.请通过实现Runnable接口和继承Thread类分别创建线程,要求:除了main线程之外,还要创建一个新的线程。Main线程重复100次“main“,新线程重复100次输出“new”。

//A。

1次当前所剩时间,直至给定的限定时间用完。考点:sleep方法

10.以下是一个模拟订票业务的程序。BookingClerk类代表自动售票员,其中包含一个订票(booking)方法。假设一开始有10张票可预定。程序运行时产生两个订票客户同时自动向

11模拟一个生产者/消费者,并且有两个条件限制:一是库存有限制,不能无限制地生产(消费者消费);二是产量有限制,一旦完成了设定的产量,生产者线程就退出,当库存达到下限时生产者继续生产。

C语言多线程编程实例

linux下C语言多线程编程实例 2007年11月29日星期四 10:39 学东西,往往实例才是最让人感兴趣的,老是学基础理论,不动手,感觉没有成就感,呵呵。 下面先来一个实例。我们通过创建两个线程来实现对一个数的递加。 或许这个实例没有实际运用的价值,但是稍微改动一下,我们就可以用到其他地方去拉。 下面是我们的代码: /*thread_example.c : c multiple thread programming in linux *author : falcon *E-mail : tunzhj03@https://www.doczj.com/doc/135962887.html, */ #include #include #include #include #define MAX 10 pthread_t thread[2]; pthread_mutex_t mut; int number=0, i; void *thread1() { printf ("thread1 : I'm thread 1\n"); for (i = 0; i < MAX; i++) { printf("thread1 : number = %d\n",number); pthread_mutex_lock(&mut); number++; pthread_mutex_unlock(&mut); sleep(2); } printf("thread1 :主函数在等我完成任务吗?\n"); pthread_exit(NULL); } void *thread2() { printf("thread2 : I'm thread 2\n"); for (i = 0; i < MAX; i++)

Java多线程技术及案例

Java多线程技术及案例 进程和线程: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。 线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。 多进程是指操作系统能同时运行多个任务(程序)。 多线程是指在同一程序中有多个顺序流在执行。 Java中多线程的多种实现方式 Java中有多种多线程实现方法,主要是继承https://www.doczj.com/doc/135962887.html,ng.Thread类的方法和 https://www.doczj.com/doc/135962887.html,ng.Runnable接口的方法。 继承Thread类 Thread是https://www.doczj.com/doc/135962887.html,ng包中的一个类,从这个类中实例化的对象代表线程,启动一个新线程需要建立一个Thread实例。 使用Thread类启动新的线程的步骤如下: 1.实例化Thread对象 2.调用start()方法启动线程 构造方法:

public Thread(String threadName); public Thread(); 例程: publicclass Thread1extends Thread{//定义一个类继承Thread privateint count=1000; publicvoid run(){//重写run方法 while(true){ System.out.print(count+" "); if(--count==0){ return; } } } publicstaticvoid main(String[] args){ Thread1 th1=new Thread1();//实例化继承了Thread的类 Thread1 th2=new Thread1(); th1.start();//调用start()方法, th2.start(); for(int i=0;i<1000;i++){ System.out.print("A "); } }

数据库死锁问题总结

数据库死锁问题总结 1、死锁(Deadlock) 所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造 成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系 统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力 协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象 死锁。一种情形,此时执行程序中两个或多个线程发生永久堵塞(等待),每 个线程都在等待被其他线程占用并堵塞了的资源。例如,如果线程A锁住了记 录1并等待记录2,而线程B锁住了记录2并等待记录1,这样两个线程就发 生了死锁现象。计算机系统中,如果系统的资源分配策略不当,更常见的可能是 程序员写的程序有错误等,则会导致进程因竞争资源不当而产生死锁的现象。 锁有多种实现方式,比如意向锁,共享-排他锁,锁表,树形协议,时间戳协 议等等。锁还有多种粒度,比如可以在表上加锁,也可以在记录上加锁。(回滚 一个,让另一个进程顺利进行) 产生死锁的原因主要是: (1)系统资源不足。 (2)进程运行推进的顺序不合适。 (3)资源分配不当等。 如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能 性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序 与速度不同,也可能产生死锁。 产生死锁的四个必要条件: (1)互斥条件:一个资源每次只能被一个进程使用。 (2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 破解:静态分配(分配全部资源) (3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 破解:可剥夺 (4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 破解:有序分配 这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。 死锁的预防和解除:

实 验 五(1) 多线程控制

实验五(1)多线程控制 一、实验目的和要求 1、学习和掌握如何编写多线程控制台程序; 2、通过编写程序,加深对进程和线程关系的理解,掌握进程、多线程程 序的执行和编写技巧。 二、实验内容和原理 请大家自己写 三、数据记录和处理(或源程序代码) 1.创建一个独立线程来确定非负整数的累加和: ①源程序代码: #include #include int sum; void *runner(void *param); main(int argc,char *argv[]) { pthread_t tid; pthread_attr_t attr; if(argc !=2){ fprintf(stderr,”usage:a.out\n”); exit(1); } if(atoi(argv[1]<0)) { fprintf(stderr,“%d mest be >=0\n”,atoi(argv[1])); exit(1); } pthread_attr_init(&attr); pthread_create(&tid,NULL,*runner,argv[1]);

pthread_join(tid,NULL); printf(“Sum=%d\n”,sum); } void *runner(void *param) { int upper=atoi(param); int i ; sum=0; if(upper>0){ for(i=1;i<=upper;i++) sum+=i ; } pthread_exit(0); } ②运行情况: #gcc –o pjc4 pjc4.c –static/usr/lib/libpthread.a 2、一个简单的linux 多线程编程实例 ①源程序代码: #include #include void thread(void) {int i; for(i=0;i<3;i++) printf("This is a pthread.\n"); } int main(void) { pthread_t id; int i,ret; ret=pthread_create(&id,NULL,(void *) thread,NULL); if(ret!=0) { printf ("Create pthread error!\n"); return 1; } for(i=0;i<3;i++) printf("This is the main process.\n");

16.JAVA网络编程实验 多线程

Java网络编程实验报告 (实验六) 学号:姓名: 实验项目名称:多线程教师评分: 一、实验目的 (1)了解线程的概念。 (2)学习简单的多线程编程。 二、预习内容及要求(要求写出预习内容) 1.进程和线程的概念 进程是程序一次动态执行的过程,对应从代码加载、执行到执行结束这样一个完整的过程,也是进程自身从产生、发展到消亡的过程。 线程是比进程更小的执行单元,一个进程在执行过程中,可以产生多个线程。每个线程都有自身的产生、执行和消亡的过程。 2.线程的状态与生命周期 ●新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。此 时它已经有了相应的内存空间和其他资源。 ●运行:线程创建之后就具备了运行的条件,一旦轮到它来享用CPU资源时,即JVM将CPU 使用权切换给该线程时,此线程的就可以脱离创建它的主线程独立开始自己的生命周期了(即 run方法执行的过程)。 ●中断:有4种原因的中断,CPU资源从当前线程切换给其他线程、执行了sleep(int millsecond) 方法、执行了wait()方法、进入阻塞状态。 ●死亡:run方法结束。 3.线程的创建 在Java语言中,与线程支持密切相关的是https://www.doczj.com/doc/135962887.html,ng.Thread类和https://www.doczj.com/doc/135962887.html,ng.Runnable接口。Runnable 接口定义很简单,只有一个run方法。任何一个类如果希望自己的实例能够以线程的形式执行,都可以来实现Runnable接口。 继承Thread类和实现Runnable接口,都可以用来创建Thread对象,效果上并没有什么不同。继承Thread类的方法很明显的缺点就是这个类不能再继承其他的类了,而实现Runnable接口不会有这个麻烦。 另外,在继承Thread类的代码中,this其实就是指当前正在运行的线程对象,如果使用实现Runnable 接口的方式,要得到当前正在执行的线程,需要使用Thread.currentThread()方法。 线程创建后仅仅是占有了内存资源,在JVM管理的线程中还没有这个线程,此线程必须调用start ()方法(从父类继承的方法)通知JVM,这样JVM就会知道又有一个新一个线程排队等候切换了。

Java多线程实现

下面要和大家分享的是Java多线程的实践,其实Java增加了新的类库并发集java.util.concurrent,该类库为并发程序提供了丰富的API多线程编程在Java 5中更加容易,灵活。本文通过一个网络服务器模型,来实践Java5的多线程编程,该模型中使用了Java5中的线程池,阻塞队列,可重入锁等,还实践了Callable,Future 等接口,并使用了Java 的另外一个新特性泛型。 简介 本文将实现一个网络服务器模型,一旦有客户端连接到该服务器,则启动一个新线程为该连接服务,服务内容为往客户端输送一些字符信息。一个典型的网络服务器模型如下: 1. 建立监听端口。 2. 发现有新连接,接受连接,启动线程,执行服务线程。 3. 服务完毕,关闭线程。 这个模型在大部分情况下运行良好,但是需要频繁的处理用户请求而每次请求需要的服务又是简短的时候,系统会将大量的时间花费在线程的创建销毁。Java 5的线程池克服了这些缺点。通过对重用线程来执行多个任务,避免了频繁线程的创建与销毁开销,使得服务器的性能方面得到很大提高。因此,本文的网络服务器模型将如下: 1. 建立监听端口,创建线程池。 2. 发现有新连接,使用线程池来执行服务任务。 3. 服务完毕,释放线程到线程池。 下面详细介绍如何使用Java 5的concurrent包提供的API来实现该服务器。 初始化 初始化包括创建线程池以及初始化监听端口。创建线程池可以通过调用java.util.concurrent.Executors类里的静态方法newChahedThreadPool或是newFixedThreadPool来创建,也可以通过新建一个 java.util.concurrent.ThreadPoolExecutor实例来执行任务。这里我们采用newFixedThreadPool方法来建立线程池。 ExecutorService pool = Executors.newFixedThreadPool(10); 表示新建了一个线程池,线程池里面有10个线程为任务队列服务。 使用ServerSocket对象来初始化监听端口。

8-实验八Java多线程操作(实验报告内容)

实验八 Java多线程操作 (实验报告) 一、目的 1.掌握Java多线程操作。 二、实验内容 启动线程,线程休眠,线程同步,等待和唤醒 三、实验环境 JDK1.6+dos环境 四、实验原理 通过案例掌握多线程操作。 五、实验步骤 1、设计一个线程操作类,要求可以产生三个线程对象,并可以分 别设置三个线程的休眠时间,如下所示: 线程A,休眠10秒 线程B,休眠20秒 线程C,休眠30秒 2、生产者与消费者问题,生产者生产一台电脑,消费者马上将生 产出的电脑取走。 六、实验小结 1、class MyThread implements Runnable{

String name; int time; public MyThread(String name,int time){ https://www.doczj.com/doc/135962887.html,=name; this.time=time; } public void run(){ try{ Thread.sleep(this.time); } catch(Exception e){ } System.out.println(https://www.doczj.com/doc/135962887.html,+"线程,休眠"+this.time/1000+"秒"); } } public class Demo08{ public static void main(String args[]){ MyThread mt1=new MyThread("线程A",10000); MyThread mt2=new MyThread("线程B",20000); MyThread mt3=new MyThread("线程C",30000);

C 中Socket多线程编程实例

C 中Socket多线程编程实例 C#中Socket多线程编程实例2010年07月18日星期日10:58 P.M.C#是 微软随着https://www.doczj.com/doc/135962887.html,新推出的一门语言。它作为一门新兴的语言,有着C++的强健,又有着VB等的RAD特性。而且,微软推出C#主要的目的是为了对抗Sun公司 的Java。大家都知道Java语言的强大功能,尤其在网络编程方面。于是,C# 在网络编程方面也自然不甘落后于人。本文就向大家介绍一下C#下实现套接字(Sockets)编程的一些基本知识,以期能使大家对此有个大致了解。首先,我向大家介绍一下套接字的概念。 套接字基本概念: 套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内 及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的 线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接 字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序)。各种进程使用这个相同的域互相之间用Internet协议簇来进行通信。 套接字可以根据通信性质分类,这种性质对于用户是可见的。应用程序一 般仅在同一类的套接字间进行通信。不过只要底层的通信协议允许,不同类型 的套接字间也照样可以通信。套接字有两种不同的类型:流套接字和数据报套 接字。 套接字工作原理: 要通过互联网进行通信,你至少需要一对套接字,其中一个运行于客户机端,我们称之为ClientSocket,另一个运行于服务器端,我们称之为ServerSocket。 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过 程可以分为三个步骤:服务器监听,客户端请求,连接确认。

JAVA多线程试题 答案

多线程 一.选择题 1.下列说法中错误的一项是(A) A.线程就是程序 B.线程是一个程序的单个执行流 B.多线程是指一个程序的多个执行流D.多线程用于实现并发 2.下列哪个一个操作不能使线程从等待阻塞状态进入对象阻塞状态(D) A.等待阴塞状态下的线程被notify()唤 B.等待阻塞状态下的纯种被interrput()中断 C.等待时间到 D.等待阻塞状态下的线程调用wait()方法 3.下列哪个方法可以使线程从运行状态进入其他阻塞状态(A) A.sleep B.wait C.yield D.start 4.下列说法中错误的一项是(D) A.一个线程是一个Thread类的实例 B.线程从传递给纯种的Runnable实例run()方法开始执行 C.线程操作的数据来自Runnable实例 D.新建的线程调用start()方法就能立即进入运行状态 5.下列关于Thread类提供的线程控制方法的说法中,错误的一项是(D) A.在线程A中执行线程B的join()方法,则线程A等待直到B执行完成 B.线程A通过调用interrupt()方法来中断其阻塞状态 C.若线程A调用方法isAlive()返回值为true,则说明A正在执行中 D.currentThread()方法返回当前线程的引用 6.下列说法中,错误的一项是() A.对象锁在synchronized()语句执行完之后由持有它的线程返还 B.对象锁在synchronized()语句中出现异常时由持有它的线程返还 C.当持有锁的线程调用了该对象的wait()方法时,线程将释放其持有的锁 D.当持有锁的线程调用了该对象的构造方法时,线程将释放其持有的锁 7.下面的哪一个关键字通常用来对对象的加锁,从而使得对对象的访问是排他的A A.sirialize B transient C synchronized D static 二.填空题 1.在操作系统中,被称做轻型的进程是线程 2.多线程程序设计的含义是可以将一个程序任务分成几个并行的任务 3.在Java程序中,run()方法的实现有两种方式:实现Runnable接口和继承Thread类 4.多个线程并发执行时,各个线程中语句的执行顺序是确定的,但是线程之间的相对执行顺序是不确定的 6.Java中的对象锁是一种独占的排他锁 7.程序中可能出现一种情况:多个线种互相等待对方持有的锁,而在得到对方的锁之前都不会释放自己的锁,这就是死锁 8.线程的优先级是在Thread类的常数MIN_PRIORITY和MAX_PRIORITY 之间的一个值 9.处于新建状态的线程可以使用的控制方法是start()和stop()。 10.一个进程可以包含多个线程

数据库原理作业

数据库原理作业 客观题预算成绩:100 分 题号:1 题型:单选题(请在以下几个选项中选择唯一正确答案) 在关系数据库设计中,设计关系模式是( )的任务 A、A)需求分析阶段 B、B)概念设计阶段 C、C)逻辑设计阶段 D、D)物理设计阶段 学员答案:C 正确性:正确 题号:2 题型:单选题(请在以下几个选项中选择唯一正确答案) 存取方法设计是数据库设计的( )阶段的任务。 A、一个1:1联系可以转换为一个独立的关系模式,也可以与联系的任意一端实体所对应的关系模式合并 B、一个1:n联系可以转换为一个独立的关系模式,也可以与联系的n端实体所对应的关系模式合并 C、一个m:n联系可以转换为一个独立的关系模式,也可以与联系的任意一端实体所对应的关系模式合并 D、三个或三个以上的实体间的多元联系转换为一个关系模式 学员答案:C 正确性:正确 题号:3 题型:单选题(请在以下几个选项中选择唯一正确答案) 数据流图属于数据库设计的哪个阶段的工具?( ) A、需求分析阶段 B、概念结构设计阶段 C、逻辑结构设计阶段 D、物理结构设计阶段 学员答案:A 正确性:正确 题号:4 题型:单选题(请在以下几个选项中选择唯一正确答案) 在数据库设计中,将ER图转换成关系数据模型的过程属于( )。 A、需求分析阶段 B、逻辑设计阶段 C、概念设计阶段 D、物理设计阶段 学员答案:B

正确性:正确 题号:5 题型:单选题(请在以下几个选项中选择唯一正确答案) 在数据库设计的需求分析阶段,描述数据与处理之间关系的方法是() A、ER图 B、业务流程图 C、数据流图 D、程序框图 学员答案:C 正确性:正确 题号:6 题型:单选题(请在以下几个选项中选择唯一正确答案) 建立索引属于数据库的() A、概念设计 B、逻辑设计 C、物理设计 D、实现与维护设计 学员答案:C 正确性:正确 题号:7 题型:单选题(请在以下几个选项中选择唯一正确答案) 在关系数据库设计中,设计关系模式是____的任务。 A、需求分析阶段 B、概念设计阶段 C、逻辑设计阶段 D、物理设计阶段 学员答案:C 正确性:正确 题号:8 题型:单选题(请在以下几个选项中选择唯一正确答案) 从E-R模型向关系模式转换时,一个m:n联系转换为关系模式时,该关系模式的码是 A、A)m端实体的码 B、B)n端实体的码 C、C)m端实体码与n端实体码的组合 D、D)重新选取其他属性 学员答案:C 正确性:正确 题号:9 题型:多选题(请在复选框中打勾,在以下几个选项中选择正确答案,答案可以

一个多线程的windows控制台应用程序

一个多线程的windows控制台应用程序 一、要求: 编写一个单进程、多线程的windows控制台应用程序。 二、平台: Window XP C# 三、内容: 每个进程都有分配给它的一个或多个线程。线程是一个程序的执行部分。 操作系统把极短的一段时间轮流分配给多个线程。时间段的长度依赖于操作系统和处理器。 每个进程都开始一个默认的线程,但是能从它的线程池中创建一个新的线程。 线程是允许进行并行计算的一个抽象概念:在一个线程完成计算任务的同时,另一个线程可以对图像进行更新,两个线程可同时处理同一个进程发出的两个网络请求。 如图所示,选择操作: 1、创建和启动一个线程。在一个进程中同时教和运行两个线程,并且可以不需要停止或者释放一个线程。 相关代码及其解释: public class Threading1:Object { public static void startup() { //创建一个线程数组 Thread[] threads=new Thread[2]; for(int count=0;count

public static void Count() { for(int count=1;count<=9;count++) Console.Write(count+" "); } } 输出结果: 这里通过new方法创建了两个线程,然后使用start()方法来启动线程,两个线程的作用是:两个线程同时从1数到9,并将结果打印出来。 运行上面的程序代码时,可能会在控制台上输出多种不同的结果。从123456789123456789到112233445566778899或121233445566778989在内的各种情况都是可能出现的,输出结果可能与操作系统的调度方式有关。 2、停止线程。当创建一个线程后,可以通过多种属性方法判断该线程是否处于活动状态,启动和停止一个线程等。相关代码及其解释: public class MyAlpha { //下面创建的方法是在线程启动的时候的时候调用 public void Beta() { while(true) { Console.WriteLine("MyAlpha.Beta is running in its own thread."); } } } public class Simple { public static int Stop() { Console.WriteLine("Thread Start/Stop/Join"); MyAlpha TestAlpha=new MyAlpha(); //创建一个线程对象 Thread MyThread=new Thread(new ThreadStart(TestAlpha.Beta)); //开起一个线程 MyThread.Start(); while(!MyThread.IsAlive);

高级java实验三

实验三:基于多线程的Socket通信 班级:计科F1202 姓名:黄浩翔学号:201216010110 实验目的:通过将Socket通信和多线程的知识结合应用,掌握基于多线程的通信设计方法。 实验内容:创建客户端Socket;创建服务器端Socket;建立基于多线程的服务器段监听和数据处理机制;Socket的启动和管理。 实验步骤: //服务端 package基于多线程Socket通信; import https://www.doczj.com/doc/135962887.html,.ServerSocket; import https://www.doczj.com/doc/135962887.html,.Socket; public class MultiServer { public static void main(String args[]) { ServerSocket server=null; int count=0; boolean listening =true; try{ try{ server =new ServerSocket(6000);

System.out.println("服务器启动:"); } catch (Exception e){ System.out.println("不能接听服务"); } while(listening){ Socket socket=server.accept(); count++; System.out.println("Accept "+count+" Client!"); Thread read = new ReadThread(socket,"[client"+count+"]"); read.start(); } server.close(); } catch (Exception e){ System.out.println("Error:" + e); } } } //多线程 package基于多线程Socket通信; import java.io.BufferedReader;

几种常用数据库的比较

几种常用数据库的比较 目前,商品化的数据库管理系统以关系型数据库为主导产品,技术比较成熟。面向对象的数据库管理系统虽然技术先进,数据库易于开发、维护,但尚未有成熟的产品。国际国内的主导关系型数据库管理系统有Oracle、Sybase、Informix和INGRES。这些产品都支持多平台,如UNIX、VMS、Windows,但支持的程度不一样。IBM的DB2也是成熟的关系型数据库。但是,DB2是内嵌于IBM的AS/400系列机中,只支持OS /400操作系统。 1.MySQL MySQL是最受欢迎的开源SQL数据库管理系统,它由MySQL AB开发、发布和支持。MySQL AB是一家基于MySQL 开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是MySQL AB 的注册商标。 MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass- deployed)的软件中去。

与其他数据库管理系统相比,MySQL具有以下优势: (1)MySQL是一个关系数据库管理系统。 (2)MySQL是开源的。 (3)MySQL服务器是一个快速的、可靠的和易于使用的数据库服务器。 (4)MySQL服务器工作在客户/服务器或嵌入系统中。 (5)有大量的MySQL软件可以使用。 2.SQL Server SQL Server是由微软开发的数据库管理系统,是Web上最流行的用于存储数据的数据库,它已广泛用于电子商务、银行、保险、电力等与数据库有关的行业。 目前最新版本是SQL Server 2005,它只能在Windows上运行,操作系统的系统稳定性对数据库十分重要。并行实施和共存模型并不成熟,很难处理日益增多的用户数和数据卷,伸缩性有限。 SQL Server 提供了众多的Web和电子商务功能,如对XML 和Internet标准的丰富支持,通过Web对数据进行轻松安全的访问,具有强大的、灵活的、基于Web的和安全的应用程序管理等。而且,由于其易操作性及其友好的操作界面,深受广大用户的喜爱。

多线程同步操作多个窗口

多线程同步操作多个窗口 RunApp "notepad.exe" RunApp "notepad.exe" RunApp "notepad.exe" Delay 2000 Dimenv temp_Hwnd temp_Hwnd = 0 Dim str, arr, i str = Plugin.Window.Search("无标题- 记事本") arr = Split(str, "|") For i = 0 To UBound(arr) - 1 temp_Hwnd = Plugin.Window.FindEx(arr(i), 0, "Edit", 0) BeginThread WriteString While temp_Hwnd <> 0'判断多线程已经启动完毕,继续循环下一个。 Delay 500 Wend Next EndScript Function WriteString() Dim str, Hwnd Hwnd = temp_Hwnd temp_Hwnd = 0 Do str = WaitKey If Hwnd <> Plugin.Window.GetKeyFocusWnd Then Call Plugin.Bkgnd.KeyPress(Hwnd, str) End If Loop End Function 多线程多开窗口同步执行与子线程间的数值如何传递: 1.Dimenv IsThread, i 2.Dim arr_Thread() 3.For i = 0 To 2 4. IsThread = False'未启动线程 5. Redim Preserve arr_Thread(i) 6. arr_Thread(i) = BeginThread(EnterThread) 7. While IsThread = False'未启动成功,等待中 8. Delay 500 9. Wend 10. '跳出循环说明 IsThread = True,已经执行到了,循环继续启动下一个 11.Next

java多线程实验报告

java多线程实验报告 篇一:西北农林科技大学java多线程实验报告 实验7 多线程 1.实验目的 (1) 掌握Java多线程的概念和实现方法 (2) 掌握Java多线程的同步问题 2.实验内容 任务一:火车售票 假设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒买一张票。打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。程序运行结果见左图。 打开Eclipse Tickets.java public class Ticket extends Thread { int ticket =1000; String name =""; public void run(){ while(true){synchronized(name){ if(ticket "第" + Thread.currentThread().getName()+ "售票点卖出了第" + ticket-- + "张票"); } } } }} try{ } catch(InterruptedException e){ }

Thread.sleep(100); Test.java public class Test { } public static void main(String args[]){} Ticket t = new Ticket(); new Thread(t,"1").start(); new Thread(t,"2").start(); new Thread(t,"3").start(); new Thread(t,"4").start(); new Thread(t,"5").start(); new Thread(t,"6").start(); new Thread(t,"7").start(); new Thread(t,"8").start(); new Thread(t,"9").start(); new Thread(t,"10").start(); 任务二:银行存款 假设某家银行,它可接受顾客的汇款,每做一次汇款,便可计算出汇款的总额。现有两个顾客,每人都分3次,每次100元将钱到入。试编写一个程序,模拟实际作业。 程序如下: classCBank { private static int sum=0; public static void add(int n){ inttmp=sum; tmp=tmp+n;// 累加汇款总额 try{ Thread.sleep((int)(10000*Math.random())); //

第5章-多线程-补充案例

第五章补充案例 案例5-1继承Thread类创建多线程 一、案例描述 1、考核知识点 编号:00105002 名称:继承Thread类创建多线程 2、练习目标 ?掌握如何通过继承Thread类实现多线程的创建。 ?掌握Thread类中run()方法和start()方法的使用。 3、需求分析 在程序开发中,会遇到一个功能需要多个线程同时执行才能完成的情况。这时,可以通过继承线程类Thread,并重写Thread类中的run()方法来实现。为了让初学者熟悉如何创建多线程,在案例中将通过继承Thread类方式创建线程,并实现多线程分别打印0~99的数字的功能。 4、设计思路(实现原理) 1)自定义一个类Demo,使其继承Thread类。 2)在Demo类中重写run()方法,在run()方法内编写一个for循环,循环体内打印:“Demo:” +当前循环次数。 3)编写测试类Example01,在Example01类的main()方法中,创建一个Demo对象,并执 行其start()方法,接着编写一个for循环,循环体内打印:“main:”+当前循环次数。

二、案例实现 class Demo extends Thread { public void run() { for (int x = 0; x < 100; x++) { System.out.println("Demo:"+x); } } } public class Example01{ public static void main(String[] args) { Demo d = new Demo(); d.start(); for(int x=0; x<100; x++){ System.out.println("main:"+x); } } } 运行结果如图5-1所示。 图5-1运行结果 三、案例总结 1、通过继承Thread类,并重写Thread类中的run()方法可以实现多线程。 2、Thread类中,提供的start()方法用于启动新线程,线程启动后,系统会自动调用run()方法。 3、main()方法中有一条主线程在运行。

多线程练习题目

多线程 一、单项 1.下述哪个选项为真?( ) A.Error类是一个RoutimeException异常 B.任何抛出一个RoutimeException异常的语句必须包含在try块之内 C.任何抛出一个Error对象的语句必须包含在try块之内 D. 任何抛出一个Exception异常的语句必须包含在try块之内 2.下列关于Java线程的说法哪些是正确的?( ) A.每一个Java线程可以看成由代码、一个真实的CPU以及数据3部分组成 B.创建线程的两种方法,从Thread类中继承的创建方式可以防止出现多父类问题 C.Thread类属于java.util程序包 D.以上说法无一正确 3.哪个关键字可以对对象加互斥锁?( ) A.transient B.synchronized C.serialize D.static 4.下列哪个方法可用于创建一个可运行的类?() A.public class X implements Runable { public void run() {……} } B. public class X implements Thread { public void run() {……} } C. public class X implements Thread { public int run() {……} } D.public class X implements Runable { protected void run() {……} } 5.下面哪个选项不会直接引起线程停止执行?( ) A.从一个同步语句块中退出来 B.调用一个对象的wait方法 C.调用一个输入流对象的read方法 D.调用一个线程对象的setPriority方法 6.使当前线程进入阻塞状态,直到被唤醒的方法是( ) A.resume()方法 B.wait()方法 C.suspend()方法 D.notify()方法 7.运行下列程序,会产生的结果是( ) public class X extends Thread implements Runnable { public void run(){ System.out.println(“this is run()”); } public static void main(String[] args) { Thread t=new Thread(new X()); t.start(); } }

多线程练习题目

多线程练习题目

————————————————————————————————作者:————————————————————————————————日期:

多线程? 一、单项 1.下述哪个选项为真?() A.Error类是一个RoutimeException异常 B.任何抛出一个RoutimeException异常的语句必须包含在try块之内 C.任何抛出一个Error对象的语句必须包含在try块之内 D.任何抛出一个Exception异常的语句必须包含在try块之内 2.下列关于Java线程的说法哪些是正确的?( ) A.每一个Java线程可以看成由代码、一个真实的CPU以及数据3部分组成 B.创建线程的两种方法,从Thread类中继承的创建方式可以防止出现多父类问题 C.Thread类属于java.util程序包 D.以上说法无一正确 3.哪个关键字可以对对象加互斥锁?( ) A.transient B.synchronized C.serialize D.static 4.下列哪个方法可用于创建一个可运行的类?() A.public classXimplements Runable{ publicvoid run() {……}} B.public class XimplementsThread { public void run(){……} } C. public class X implements Thread { public int run() {……} } D.publicclass X implements Runable { protectedvoidrun(){……}} 5.下面哪个选项不会直接引起线程停止执行?( ) A.从一个同步语句块中退出来 B.调用一个对象的wait方法 C.调用一个输入流对象的read方法 D.调用一个线程对象的setPriority方法 6.使当前线程进入阻塞状态,直到被唤醒的方法是() A.resume()方法 B.wait()方法 C.suspend()方法D.notify()方法 7.运行下列程序,会产生的结果是( ) publicclassXextends Thread implements Runnable { public void run(){ System.out.println(“this is run()”); } publicstaticvoid main(String[] args) { Thread t=new Thread(newX()); t.start();

Java实验五线程

实验五线程 一实验要求 1、理解进程和线程概念; 2、掌握创建、管理和控制Java线程对象的方法; 3、了解并发执行的多线程存在的各种关系 二实验内容 1、使用线程对象或Timer定时器制作数字时钟标签组件,显示当前日期和时间,每秒刷新,将该标签添加到框架窗口。 import java.awt.FlowLayout; import java.text.SimpleDateFormat;//简单日期格式类 import java.util.Locate; import java.util.Timer;//一种工具,线程用其安排以后在后台线程中执行的任务 import java.util.TimerTask; import java.swing.JLabel; public class ShizhongJFrame extends JFrame{ { Public ShizhongJFrame(){ JFrame f=new JFrame(“数字时钟”); f.setLayout(new FlowLayout()); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(200,70); final JLable lable=new JLable; final SimpleDateFormat format=new SimpleDateFormat(“H:m:s”,Locate.CHINA); f.add(lable); Timer time=new Timer(); time.scheduleAtFixedRate(new TimerTask(){ Public void run(){ Label.setText(format.format(new Date(System.currentTimeMillis()))); } },0,1000); f.setVisible(true); } Public staic void main(String arg[]){ New ShizhogJFrame(); } } 三实验内容中遇到的问题、解决方法和体会。

相关主题
文本预览
相关文档 最新文档