属于对“synchronized”的使用原则的是①不需要在多个线程中使用共享资源时,就没有必要使用②如果方法只是放回对象的值,而不进行修改,就没有必要使
A. ①②
B. 只有①
C. 只有②
D. 都不正确
查看答案
程序开发者必须创建一个线程去管理内存的分配。
A. 对
B. 错
所谓线程同步就是若干个线程都需要使用同一个synchronized修饰的方法。
A. 对
B. 错
简述程序、进程和线程之间的关系?什么是多线程程序?
分析程序,写出结果package com.wj.demo;/** 1.Product类是一个产品类,用来表示生产产品* 2.里面的有set和get方法,set方法用来设置生产什么样的产品,get是得到产品*/class Product{private String name="A";//产品的名字private boolean flag=true;//标志,true代表可以生产,false代表可以取得产品public synchronized void getName() {//得到产品的函数if(flag){//如果标志为true,则代表只可以生产,不能进行取产品try {super.wait();//调用Object父类的方法,使得到该对象锁的线程等待,把该线程放到等待该对象锁的队列里面//,并且释放cpu,和释放该对象的对象锁,使其他的线程可以得到该对象的锁} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}System.out.println(name);//打印产品的名字try {Thread.sleep(200);//该线程休眠200毫秒,释放cup,让其他的线程执行,但是不会释放对象锁} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}flag=true;//把标志置位true,表示已经取了产品了,可以进行生产了,已经不没有产品了,不能得到产品了//调用了super.notifyAll()方法后,并不会马上执行,要等待synchronized代码块所有的程序执行完了以后才会//释放对象锁,进行唤醒其他的线程super.notifyAll();//调用父类Object的方法,释放对象锁,唤醒在等待该对象锁的所有线程}public synchronized void setName(String name) {if(!flag){//如果flag为false则表示,只可以取产品,不能进行生产产品try {super.wait();//进行等待,和上面的一样} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}try {Thread.sleep(200);//解释如上} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}this.name = name;//设置产品的名字flag=false;//设置标志,表示可以取产品了,不能再进行生产了super.notifyAll();//如上所示,唤醒其他的想得到该对象锁的所有线程}}//Factory类是一个工厂,用来控制生产什么样的产品class Factory implements Runnable{private Product product;//共享的对象public Factory(Product product) {//构造函数,对product进行初始化super();this.product = product;}@Overridepublic void run() {//覆写的run方法,进行线程操作// TODO Auto-generated method stubfor(int i=1;i<31;i++){if(i%3==1){//如果余数为1,则生产A产品product.setName("A");//生产A产品}else if(i%3==2){//如果余数为2,则生产B产品product.setName("B");//生产B产品}else{//其他的生产C产品product.setName("C");//生产C产品}}}}//Customer是消费者类,用来使用工厂生产的产品class Customer implements Runnable{private Product product;//贡献资源对象public Customer(Product product) {//构造函数,初始化productsuper();this.product = product;}@Overridepublic void run() {// TODO Auto-generated method stubfor(int i=1;i<31;i++){try {Thread.sleep(500);//进行线程休眠,使打印有时间延迟} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.print(""+i+"----->");this.product.getName();//消费产品}}}public class ThreadDemo4 {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubProduct p=new Product();//创建共享资源对象Factory fp=new Factory(p);//创建工厂Customer cp=new Customer(p);//创建消费者Thread tfp=new Thread(fp);//创建工厂线程进行生产Thread tcp=new Thread(cp);//创建消费者线程进行消费tfp.start();//启动线程tcp.start();//启动线程}}