参考答案和解析
正确答案:

 

以下程序使用内部类实现线程,对j 增减的时候没有考虑顺序问题。
public class ThreadTest1
{
private int j;
public static void main(String args[]){
ThreadTest1 tt=new ThreadTest1();
Inc inc=tt.new Inc();
Dec dec=tt.new Dec();
for(int i=0;i<2;i++){
Thread t=new Thread(inc);
t.start();
t=new Thread(dec);
t.start();
}
}
private synchronized void inc(){
j++;
System.out.println(Thread.currentThread().getName()+"-inc:"+j);
}
private synchronized void dec(){
j--;
System.out.println(Thread.currentThread().getName()+"-dec:"+j);
}
class Inc implements Runnable{
public void run(){
for(int i=0;i<100;i++){
inc();
}
}
}
class Dec implements Runnable{
public void run(){
for(int i=0;i<100;i++){
dec();
}
}
}
}

更多“设计4 个线程,其中两个线程每次对j 增加1,另外两个线程对j每次减少1。写出程序。”相关问题
  • 第1题:

    下述是关于进程和线程的说法:

    ①在传统的OS中,进程是系统分配资源和进行调度的基本单位。而线程则是系统分配资源的基本单位。

    ②进程就是线程。

    ③线程可以创建另外一个线程,同一个进程中的多个线程可以并发执行。线程也有就绪、运行和阻塞三种基本状态。

    其中正确的个数为______。

    A.0

    B.1

    C.2

    D.3


    正确答案:B
    解析:在传统的OS中,进程是系统分配资源和进行调度的基本单位。线程则是系统实施调度的基本的、独立的单位。线程基本上不拥有资源,只拥有一点运行必不可少的资源。引入线程的原因:由于在进程的创建、撤消和切换过程中,系统付出的时空代价较大,因此在系统中的进程数目不宜过多,进程切换不能过于频繁,这就限制了并发程度的提高。引入线程之后,将传统的进程的两个基本属性分开,也就是说在传统的OS中,进程是系统分配资源和进行调度的基本单位,当引入线程之后,进程只作为分配资源的基本单位,而将线程作为调度的基本单位。可以通过创建线程来完成任务,提高了并发程度。线程可以创建另外一个线程,同一个进程中的多个线程可以并发执行。线程也有就绪、运行和阻塞三种基本状态。

  • 第2题:

    设计4 个线程,其中两个线程每次对j 增加1,另外两

    个线程对j每次减少1。写出程序。


    正确答案:

     

    以下程序使用内部类实现线程,对j 增减的时候没有考虑顺序问题。

    public class ThreadTest1

    {

    private int j;

    public static void main(String args[]){

    ThreadTest1 tt=new ThreadTest1();

    Inc inc=tt.new Inc();

    Dec dec=tt.new Dec();

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

    Thread t=new Thread(inc);

    t.start();

    t=new Thread(dec);

    t.start();

    }

    }

    private synchronized void inc(){

    j++;

    System.out.println(Thread.currentThread().getName()+"-inc:"+j);

    }

    private synchronized void dec(){

    j--;

    System.out.println(Thread.currentThread().getName()+"-dec:"+j);

    }

    class Inc implements Runnable{

    public void run(){

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

    inc();

    }

    }

    }

    class Dec implements Runnable{

    public void run(){

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

    dec();

    }

    }

    }

    }

  • 第3题:

    关于线程,下列叙述正确的是______。

    A.线程本身也是一个程序,它自己能独立运行

    B.多个线程中,每一个线程都有自己独立的一块内存空间、一组系统资源

    C.线程就是一个程序内部的顺序控制流

    D.多线程就是多次启动一个程序


    正确答案:C
    解析:线程本身并不是程序,而是一个程序内部的顺序控制流,它自己本身并不能运行,必须在程序中运行,所以选项A错误。对于进程而言,每个进程都有自己独立的一块内存空间、一组系统资源。而线程不同于进程,多个线程共享一块内存空间和一组系统资源,所有选项B错误。多线程指在一个程序中可以定义多个线程并同时运行它们,每个线程可以执行不同的任务,即在同一个程序中多行语句同时执行,而不是多次启动一个程序,所以选项D错误。多线程是针对一个程序而言的,代表着一个程序内部可以同时执行的线程个数。只有选项C叙述正确。

  • 第4题:

    下列说法中,错误的一项是______。

    A.一个线程组中可以包含若干线程

    B.一个Java应用程序启动时,Java运行系统为该程序创建一个名为main的线程

    C.一个线程组中不可以再包含线程组

    D.一个Java应用程序的最顶层线程组是main


    正确答案:C

  • 第5题:

    一个进程可由两个线程组成,若其中一个线程被调度程序选中后进入运行态,占用处理机资源,其他的线程位于就绪队列,则此时该进程的状态是( )

    A. 运行状态
    B. 就绪状态
    C. 挂起状态
    D. 阻塞状态

    答案:A
    解析:
    运行中的进程可以具有以下三种基本状态。1)就绪状态(Ready):进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。2)运行状态(Running):进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。3)阻塞状态(Blocked):由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。题目中该进程已经有线程投入运行,即该进程占用了CPU资源。故选择A选项。

  • 第6题:

    现代操作系统均采用了线程技术,采用线程技术()

    • A、可以减少系统开销
    • B、允许同一进程中拥有多个线程
    • C、能让各线程独立占用处理器
    • D、降低了线程间的信息传递速度
    • E、允许不同的线程执行相同的程序

    正确答案:A,B,C,D,E

  • 第7题:

    超线程技术是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让个别处理器都能使用线程级并行计算,从而兼容多线程操作系统和软件,提高处理器的性能


    正确答案:正确

  • 第8题:

    程序的创建有哪几步()。

    • A、启动线程
    • B、指定线程运行的起始点
    • C、为线程对象分配内存运行空间
    • D、在主程序中创建线程对象
    • E、建立线程类

    正确答案:A,D,E

  • 第9题:

    举两个多线程程序设计的例子,其中多线程的性能比单线程的性能差。


    正确答案: A.任何形式的顺序程序对线程来说都不是一个好的形式。例如一个计算个人报酬的程序。
    B.一个“空壳”程序,如C-shell和kornshell。这种程序必须密切检测其本身的工作空间。如打开的文件、环境变量和当前工作目录。

  • 第10题:

    下列关于超线程技术说法错误的是()

    • A、超线程技术的CPU在功能上与双核CPU相似
    • B、超线程技术就是利用特殊的硬件指令,把两个逻辑内核拟成物理芯片
    • C、超线程技术是让单个处理器能使用线程级并行计算,从而兼容多线程并行计算
    • D、只要CPU支持超线程技术就能发挥超线程的性能,与其它硬件和软件无关

    正确答案:C

  • 第11题:

    填空题
    Java程序运行时,至少启动两个线程,分别是()、()

    正确答案: main线程,gc线程
    解析: 暂无解析

  • 第12题:

    单选题
    以下多线程程序的设计步骤,其中错误的是()
    A

    在主程序中创建线程对象;

    B

    调用线程对象的start函数来启动线程;

    C

    在Windows中注册一个现成;

    D

    由Thread类派生出一个线程类;


    正确答案: D
    解析: 暂无解析

  • 第13题:

    下列程序的运行结果是______。 class A implements Runnable { int a; iht i = 2; A(int x) { a = x; } public void run() { while(i > 0) { System.out.println("线程" + a); i--; } } } public class Testl3 { public static void main(String[] args) { Thread a1 = new Thread(new A(1)); Thread a2 = new Thread(new A(2)); a1.start(); a2.start(); } }

    A.线程1 线程1 线程2 线程2

    B.线程1 线程2

    C.线程1 线程2 线程1 线程2

    D.线程1 线程1 线程1 线程1


    正确答案:A
    解析:类A实现了Runnable接口,并且通过类的构造函数A(int x)传递整型参数给对象作为线程的编号。在run()线程体内,实现打印两个字符串。在main()方法中,用A类的2个对象创建了a1和a2两个线程,当a1和a2开始执行时,从A类的run()方法开始执行。

  • 第14题:

    在创建线程时可以显式地指定线程组,此时可供选择的线程构造方法有( )种。A.1B.2SXB

    在创建线程时可以显式地指定线程组,此时可供选择的线程构造方法有( )种。

    A.1

    B.2

    C.3

    D.4


    正确答案:C
    线程组是由java.lang包中的Thread-Group类实现的。在创建线程时可以显式地指定线程组,此时需要从如下三种线程构造方法中选择-种;publicThread(ThreadGroupgroup,Runnabletarget);publicThread(ThreadGroupgroup,Stringname);publicThread(ThreadGroupgroup,Runnabletarget,Stringname)。

  • 第15题:

    设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。


    正确答案:
    public class ThreadTest1{
    private int j;
    public static void main(String args[]){
    ThreadTest1 tt=new ThreadTest1();
    Inc inc=tt.new Inc();
    Dec dec=tt.new Dec();
    for(int i=0;i<2;i++){
    Thread t=new Thread(inc);
    t.start();
    t=new Thread(dec);
    t.start();
    }
    }
    private synchronized void inc(){
    j++;
    System.out.println(Thread.currentThread().getName()+"-inc:"+j);
    }
    private synchronized void dec(){
    j--;
    System.out.println(Thread.currentThread().getName()+"-dec:"+j);
    }
    class Inc implements Runnable{
    public void run(){
    for(int i=0;i<100;i++){
    inc();
    }
    }
    }
    class Dec implements Runnable{
    public void run(){
    for(int i=0;i<100;i++){
    dec();
    }
    }
    }
    }

  • 第16题:

    下列关于超线程技术说法错误的是()

    A.超线程技术的CPU在功能上与双核CPU相似

    B.超线程技术就是利用特殊的硬件指令,把两个逻辑内核拟成物理芯片

    C.超线程技术是让单个处理器能使用线程级并行计算,从而兼容多线程并行计算

    D.只要CPU支持超线程技术就能发挥超线程的性能,与其它硬件和软件无关


    参考答案:C

  • 第17题:

    下面有关超线程技术叙述正确的有()。

    • A、超线程技术就是把两个逻辑内核模拟成两个物理芯片
    • B、超线程技术可以使单个处理器都能使用线程级并行计算
    • C、超线程技术的英译是Hyper-Threading Technology
    • D、超线程技术就是一个物理芯片中有两个物理核心

    正确答案:B,C

  • 第18题:

    以下多线程程序的设计步骤,其中错误的是()

    • A、在主程序中创建线程对象;
    • B、调用线程对象的start函数来启动线程;
    • C、在Windows中注册一个现成;
    • D、由Thread类派生出一个线程类;

    正确答案:C

  • 第19题:

    Java程序运行时,至少启动两个线程,分别是()、()


    正确答案:main线程;gc线程

  • 第20题:

    在java程序中,下列关于线程的说法错误的是()

    • A、线程启动调用start方法
    • B、线程的主体是run方法
    • C、线程运行中调用sleep方法可以进入阻塞状态
    • D、在java中,优先级的数值为1的线程可以抢占优先级为5的线程的资源

    正确答案:D

  • 第21题:

    实用的网络程序最少需要几个线程?()

    • A、两个线程,一个线程等待网络消息,另一个线程处理用户动作
    • B、一个线程即可
    • C、三个线程,一个线程作为服务器端,第二个线程作为客户端,第三个线程响应用户动作
    • D、四个线程,一个线程作为服务器端,第二个线程作为客户端,第三个线程作为数据传输,第四各线程响应用户动作

    正确答案:A

  • 第22题:

    为应用程序开发人员上班Certkiller.com。 您需要修改应用程序的代码。 应用程序使用两个线程命名线程A和线程B.要完成执行之前线程开始执行线程B。 您将如何完成这项任务?()

    • A、定义线程A在较低的优先级运行。
    • B、定义线程B在更高的优先级运行。
    • C、执行WaitCallback委托来同步线程。
    • D、调用线程A睡眠的方法
    • E、调用线程A自旋锁的方法

    正确答案:C

  • 第23题:

    问答题
    举两个多线程程序设计的例子,其中多线程的性能比单线程的性能差。

    正确答案: A.任何形式的顺序程序对线程来说都不是一个好的形式。例如一个计算个人报酬的程序。
    B.一个“空壳”程序,如C-shell和kornshell。这种程序必须密切检测其本身的工作空间。如打开的文件、环境变量和当前工作目录。
    解析: 暂无解析

  • 第24题:

    判断题
    超线程技术是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让个别处理器都能使用线程级并行计算,从而兼容多线程操作系统和软件,提高处理器的性能
    A

    B


    正确答案:
    解析: 暂无解析