java文件多线程练习题答案_第1页
java文件多线程练习题答案_第2页
java文件多线程练习题答案_第3页
java文件多线程练习题答案_第4页
java文件多线程练习题答案_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、多线程一、填空题 1、健状的 2、run()3、Thread多线程Runnable4、1015、synchronized、 wait()、 notify()6、 init() 7、并发8、线程、 start()、 pa()、 stop()destroy()9、线程不安全性10、死锁 11、finally12、死锁13、数据竞争 14、sleep() 15、synchronized 16、抢先式调度 17、false18、线程 代码19、对象流20、对象串行化21、事件源 22、 Thread 23、main、优先级倒置、饥饿24、loicture25、sleep()26、java.lang.T

2、nread 27、可运行28、运行状态 29、yield()30、run() 31、Thread32、wait() notify() 33、数据34、run ()35、新建状态、可运行状态、运行状态、终止状态。二、选择题1-5BBCCD610CBDAD11-15BDAAB16-20 CBCCA21-25 CBADD36-40 CBCBD41-45 ACDBB56-60 CCCBD61-65 CBBAA76-80 BCBDD81-85 CCCDB96-100ABAAC101-105 DCCDB CDBDC三、多项选择26-30CCABB31-35DBDDB46-50 BDACB51-55 DCD

3、CA66-70 BABBA71-75 ADBAA86-90 AADAB91-95 BBACA106-110 DABAB111-1151、ACD5、ABC四、判断题2、ABCD6、AD3、ABC7、ABCD4、AB1-10 T T T T T T F T五、程序分析题T11-21 T F T TT F1、输出结果:ACBBBD2、run()方法作为接口中的方法缺省是 public 的,题中缩小了范围。改正如下、publicclassTestimplementsRunnableThreadt=newThread(this); t.start();publicprotected voidrun()S

4、ystem.out.prln(“thread is running now”);3、该程序的运行结果为: Current threadAfter name change 321六、程序设计题1、有三个线程 ID 分别是 A、B、C,请有多线编程实现,在屏幕上循环打印 10 次 ABCABCpublic sic void main(String args) XunleiLock lock = new XunleiLock();newThread(newXunleiPrer(A,lock).start();newThread(newXunleiPrer(B,lock).start();newThr

5、ead(newXunleiPrer(C,lock).start();class XunleiPrer implements Runnable private String name = ;private XunleiLock lock = null;privatecount=10;public XunleiPrer(String name, XunleiLock lock) = name;this.lock = lock;Overridepublic void run() while(count0) synchronized (lock) if(lock.getName().equalsIgn

6、oreCase() System.out.pr(name);count-; if(.equals(A) lock.setName(B);elseif(.equals(B) lock.setName(C);elseif(.equals(C) lock.setName(A);class XunleiLockpublic String name = A; public String getName() return name;public void setName(String name) = name;2、试着编写一个程序,创建两个新线程。 import java.util.*;class Tim

7、ePrer extends Thread pauseTime;String name;public TimePrer(x, String n) pauseTime = x; name = n;public void run() while(true) try System.out.prln(name + : + newDate(System.currentTimeMillis();Thread.sleep(pauseTime); catch(Exception e) System.out.prln(e);sic public void main(String args) TimePrertp1

8、=newTimePrer(1000,FastGuy);tp1.start();TimePrertp2=newTimePrer(3000,SlowGuy);tp2.start();3、试着编写一个程序,实现 Runnable 接口,创建的一个线程。/通过 Runnable 接口创建的另外一个线程;class thread2 implements Runnable/自定义线程的 run()方法; public void run()System.out.prln(Thread2 is running);/程序的主类class Multi_Thread/主类;plubic sic void(Strin

9、g args)/主方法;thread1threadone=newthread1();/ 用Thread 类的子类创建线程;Thread threadtwThread(new thread2();/用 Runnable 接口类的对象创建线程;threadone.start(); threadtwo.start(); /strat()方法启动线程;4、实现通过四个售票点发售某日某次列车的 100 张车票,一个售票点用一个线程表示。public class ThreadDome1public sic void main(String args)ThreadTest t = new ThreadTes

10、t(); t.start();t.start();t.start();t.start();class ThreadTest extends Threadprivateticket = 100;public void run() while(true) if(ticket 0)System.out.prln(Thread.currentThread().getName() +is saling ticket + ticket-);else break;public class ThreadDemo1public sic void main(String args)new ThreadTest()

11、.start();new ThreadTest().start(); new ThreadTest().start(); new ThreadTest().start();class ThreadTest extends Threadprivateticket = 100;public void run() while(true) if(ticket 0)System.out.prln(Thread.currentThread().getName() + is saling ticket + ticket-);else break;5、CrazyCoder为例,现在 6 个成员因工作需要,成员

12、需要做一个项目,因为是多个人做,设计用多线程来做。首先定义成员类 UserInfo(表示成员信息),还有一个方法 Work()表示工作。public claserInfo private string _name;/ 用户名称public string Nameget return _name; set _name = value; /线程执行具体方法 注意:必须是 Void 类型,不能为静态方法/ by crzycoder HYPERLINK http:/w/ http:/w/public void Work()/这里写要做的工作代码现在开始写线程代码public class WorkThr

13、ead/ 线程执行代码/ by crzycoder HYPERLINK http:/w/ http:/w/public void CrazyCoderThread()/假设 for (6 名成员开始工作i = 1; i = 6; i+)UserInfo u = new UserInfo();u.Name= 疯 狂成 员 +i.ToString();Thread t = new Thread(u.Work); t.Start();6、用 JAVA SOCKET 编程,实现简单的 Echo 功能。 如、客户端从键盘输入 hi (当用户输出 exit 退出程序),服务端响应为 hi(服务器要求为多线

14、程)解、服务器程序、import java.io.*; import .*;public class MyServer extends Thread private Socket cq ;public MyServer(Socket cq) this.cq = cq;public void run() tryBufferedReaderin=newBufferedReader(newInputStreamReader(cq.getInputStream();PrWriter out=new PrWriter(cq.getOutputStream();while(true)String str=

15、in.readLine();System.out.prln(str);out.prln(message: +str);out.flush();if(str.equals(exit) break;catch(IOException e)System.out.prln(e.message();public sic void main(String args) throws IOExceptionServerSocket server=new ServerSocket(8009); while(true)Socket s=server.accept(); new MyServer(s).start(

16、);客户端程序、 import .*; import java.io.*;public class MyCntpublic sic void main(String args)throws ExceptionSocket server=new Socket(localhost,8009);BufferedReaderin=newBufferedReader(newInputStreamReader(server.getInputStream();PrWriterout=newPrWriter(server.getOutputStream();BufferedReaderbr=newBuffer

17、edReader(newInputStreamReader(System.in); while(true)String str=br.readLine();out.prln(str);out.flush();if(str.equals(exit) break;System.out.prserver.close();ln(in.readLine();7、提货单真实数据一个调用者在调用耗时操作,不能立即返回数据时,先返回一个提货单.然后在过一断时间后凭提货单来获取真正的数据.去蛋糕店买蛋糕,不需要等蛋糕做出来(假设现做要很长时间),只需要领个提货单就可以了(去干别的事情),等到蛋糕做好了,再拿提货

18、单取蛋糕就可以了。public class Host public Data request(finalcount, final char c) System.out.pr BEGIN);ln(request( + count + , + c + )/ (1) 建立 FutureData 的实体final FutureData future = new FutureData();/ (2) 为了建立 RealData 的实体,启动新的线程new Thread() public void run() /在类中使用 count、future、c。RealData realdata = new Re

19、alD future.setRealData(realdata);.start();ount, c);System.out.pr END);ln(request( + count + , + c + )public class RealData implements Data private final Stringcontent;public RealData(count, char c) System.out.pr ) BEGIN);ln(making RealData( + count + , + c +char buffer = new charcount;for (i = 0; i

20、count; i+) bufferi = c; try Thread.sleep(1000); catch (erruptedException e) System.out.prln(making RealData( + count + , + c +) END);this.content = new String(buffer);public String getContent() return content;public class FutureData implements Data private RealData realdata = null;privateready = fal

21、se;public synchronized void setRealData(RealData realdata) if (ready) return; / 防止 setRealData 被调用两次以上。this.realdata = realdata; this.ready = true; notifyAll();public synchronized String getContent() while (!ready) try wait(); catch (erruptedException e) return realdata.getContent();顾客做完自己的事情后,会拿着自己

22、的“提货单”来取蛋糕、System.out.prln(data1 = + data1.getContent();这时候如果蛋糕没做好,就只好等了、while (!ready) try wait(); catch (erruptedException e) /等做好后才能取到 return realdata.getContent();8、一个从 1 加到 10,第 2 个从 11 加到 20.线程同步执行,最后再把十个线程结果相加public class Test extends Thread sicn = 0;startNum = 0 ;privatepublic Test (sn)this.

23、startNum = sn ;public sic synchronized void addSum (num)n += num ;public sic void main(String args) Thread thList = new Thread 10 ;for (i = 0; i 10; i +) thList i = new Test(i * 10 + 1) ; thList i.start();for (i = 0 ; i 10 ; i +)thList i.join () ;System.out.prln (Sum is : + n) ;public void run() sum

24、 = 0 ;for (i = 0; i 10; +i) sum += sn + i ;addSum (sum) ;9、一个多线程的摇奖器的例子在第一个类中定义三个 void 方法用于产生随机数import java.util.Random; public class YaoJiangQi privatebase=9;public void winningone()Random random=new Random(); random.setSeed(11l);/这里可以用不同的(long) numberline=new7;System.out.pr(一等奖号码为、 );for(i=0;i=6;i

25、+)if(i=0) numberlinei=random.next else(base)+1;for(j=0;ji;j+)if(numberlinei=numberlinej)numberlinei=random.next(base)+1;System.out.prSystem.out.pr(numberlinei);(n);public void winnino()Random random=new Random(); random.setSeed(22l); numberline=new7;System.out.pr(二等奖号码为、);for(i=0;i=6;i+)if(i=0) numb

26、erlinei=random.next else(base)+1;for(j=0;ji;j+)if(numberlinei=numberlinej)numberlinei=random.next(base)+1;System.out.pr(numberlinei);System.out.pr(n);public void winningthree()Random random=new Random(); random.setSeed(33l); numberline=new7;System.out.pr(三等奖号码为、 );for(i=0;i=6;i+)if(i=0) numberlinei=

27、random.next else(base)+1;for(j=0;ji;j+)if(numberlinei=numberlinej)numberlinei=random.next(base)+1;System.out.pr(numberlinei);定义三个线程public class Yaoone extends Thread public void run()YaoJiangQi yao1=new YaoJiangQi(); yao1.winningone();public class Yaotwo extends Thread public void run()YaoJiangQi ya

28、o2=new YaoJiangQi();yao2.winnino();public class Yaothree extends Thread public void run()YaoJiangQi yao3=new YaoJiangQi(); yao3.winningthree();测试public class TryYaoJiangQi public s tryic void main(String args) Thread thread1=new Yaoone(); Thread thread2=new Yaotwo(); Thread thread3=new Yaothree(); t

29、hread1.setPriority(3); thread2.setPriority(2); thread3.setPriority(1); thread1.start();thread2.start(); thread3.start();catch(Exception e)e.prStackTrace();10、编写一个多线程程序实现如下功能、线程 A 和线程 B 分别在屏幕上显示信息“A start”“B start”后 调用 wait 等待;线程C 开始后调用 sleep 休眠一段时间,然后调用 notifyall,使线程 A 和线程 B 继续运行。线程 A 和线程 B 恢复运行后输出信

30、息“A END”“B END”后结束,线程 C 在判断线程A 线程B 结束后,自己也结束运行.、ThreadDemo.java-public class ThreadDemo public sic void main(String args) Object obj = new Object();ThreadA ta = new Threabj);ThreadB tb = new ThreadB(obj);ThreadC tc = new ThreadC(obj, ta, tb); ta.start();tb.start();tc.start();/ 线程 Aclass ThreadA exte

31、nds Thread private Object obj;public Threabject obj) this.obj = obj;public void run() System.out.prln(A Start);synchronized(obj) try obj.wait(); catch(Exception e) e.prStackTrace();System.out.prln(A End);/ 线程 Bclass ThreadB extends Thread private Object obj;public ThreadB(Object obj) this.obj = obj;

32、public void run() System.out.prln(B Start);synchronized(obj) try obj.wait(); catch(Exception e) e.prStackTrace();System.out.prln(B End);/ 线程 Cclass ThreadC extends Thread private Object obj;private ThreadA ta; private ThreadB tb;public ThreadC(Object obj, ThreadA ta, ThreadB tb) this.obj = obj;this.

33、ta = ta; this.tb = tb;public void run() System.out.prln(C Start);synchronized(obj) try sleep(1000); obj.notifyAll(); catch(Exception e) e.prStackTrace();while(ta.isAlive() & tb.isAlive(); / 判断 A 线程和B 线程是否已经结束System.out.prln(C End);11、设计 4 个线程,其中两个线程每次对 j个线程对j 每次减少 1。写出程序。增加 1,另外两public class ThreadT

34、est1private public sj;ic void main(String args)ThreadTest1 tt=new ThreadTest1(); Inc inc=tt.new Inc();Dec dec=tt.new Dec();for(i=0;i2;i+)Thread t=new Thread(inc); t.start();t=new Thread(dec); t.start();private synchronized void inc() j+;System.out.pr);ln(Thread.currentThread().getName()+-inc:+jpriva

35、te synchronized void dec()j-;System.out.prln(Thread.currentThread().getName()+-dec:+j);class Inc implements Runnablepublic void run()for(i=0;i100;i+) inc();class Dec implements Runnable public void run()for(i=0;i100;i+)dec();12、在java 中实现同时写多张public class TestThread private String s;public void pr ne

36、w Thread() () public void run() while (Thread.currentThread() = this) /当进程资源分配到该线程对象时执行System.out.pr try ln(s);/执行自定义操作Thread.sleep(10);/休息一下,让出资源 catch (erruptedException e) e.prStackTrace();.start();public sic void main(String args) /实例化 4 个不同的对象,同时开始做自己的操作TestThread t1 = new TestThread();t1.s = A

37、;TestThread t2 = new TestThread(); t2.s = B;TestThread t3 = new TestThread(); t3.s = C;TestThread t4 = new TestThread(); t4.s = D;t1.pr t2.pr t3.pr t4.pr();();();();13、要实现一个 socket 服务器接受客户端 1 发来的消息,客户端 1 每隔一段时间就会发送消息给服务器,服务器将消息数据库,同时发送到客户端 2 用于实时显示,是通过两个端口分别与两个客户端进行通信,一收一发还是仅方法进行发送。 import java.awt.

38、*; import java.awt.event.*; import java.applet.*; import .*; import java.io.*;import java.util.*;一个端口,收消息,然后再调用public class ChatCnt extends Applet TextField tfName = new TextField(15); /输入文本域Button btConnect = new Button(连接); /连接按钮Button btDisconnect = new Button(断开连接);TextArea tfChat = new TextArea

39、(8,27); /显示聊天信息文本框Button bd = new Button(发送);TextField tfMessage = new TextField(30); /聊天输入java.awt.List list1 = new java.awt.List(9); /显示用户信息Socket socket=null; /连接端口PrStres=null; /输出流Listen listen=null; /线程public void init() /Applet 初始化tfChat.setEditable(false); /设置信息显示框为不可编辑Panel panel1 = ne Pane

40、l panel2 = ne Panel panel3 = nenel(); /实例化面板 nel();nel();tfChat.setBackground(Color.white); /设置组件背景颜色 panel1.setBackground(Color.orange); panel2.setBackground(Color.pink); panel3.setBackground(Color.orange);panel1.add(new Label( panel1.add(tfName); panel1.add(btConnect); panel1.add(btDisconnect); pa

41、nel2.add(tfChat); panel2.add(list1);、); /增加组件到面板上panel3.add(new Label(聊天信息);panel3.add(tfMessage);panel3.add(bd);setLayout(new BorderLayout(); /设置 Applet 布局管理器add(panel1, BorderLayout.NORTH); /增加面板到 Applet 上add(panel2, BorderLayoENTER);add(panel3, BorderLayout.SOUTH);public try if(evt.action(Event e

42、vt,Object obj) /事件处理=btConnect) /点击连接按钮if (socket=null)socket=new Socket(InetAddress.getLocalHost(),5656); /实例化一个套接字ps=new PrStream(socket.getOutputStream(); /获取输出流StringBuffer inf StringStringBuffer(INFO: );userinfo=tfName.getText()+:+InetAddress.getLocalHost().toS tring();ps.prln(info.append(useri

43、nfo); /输出信息ps.flush();listen=new Listen(this,tfName.getText(),socket); /实例化线程listen.start(); /启动线程else if(evt.=btDisconnect) /点击断开连接按钮disconnect(); /调用断开连接方法else if(evt.=bd) /点击发送按钮if(socket!=null)StringBuffer msg=new StringBuffer(MSG: ); String msgtxt=new String(tfMessage.getText();ps.prln(msg.appe

44、nd(tfMessage.getText(); /发送信息ps.flush();catch (Exception ex)ex.prStackTrace(); /输出错误信息return true;public void disconnect() /断开连接方法if(socket!=null)ps.prln(QUIT); /发送信息ps.flush();class Listen extends Thread /服务器传送的信息String nall; /用户名BufferedReader reader ; /输入流PrStres=null; /输出流Socket socket=null; /本地

45、套接字ChatCnt cnt=null; /客户端 ChatCnt 实例public Listen(ChatCnt p,String n,Socket s) cnt=p;name=n;socket=s;try reader=newBufferedReader(newInputStreamReader(s.getInputStream(); /获取输入流ps=new PrStream(s.getOutputStream(); /获取输出流catch(IOException ex)cnt.disconnect(); /出错则断开连接ex.prStackTrace(); /输出错误信息public

46、void run() String msg=null; while(socket!=null) trymsg=reader.readLine(); /catch(IOException ex)服务器端传来信息cnt.disconnect(); /出错则断开连接ex.prStackTrace(); /输出错误信息if (msg=null) /从服务器传来的信息为空则断开此次连接c c cnt.listen=null; nt.socket=null; nt.list1.removeAll();return;StringTokenizer st=new StringTokenizer(msg,:);

47、 /分解字符串String keyword=st.nextToken();if(keyword.equals(newUser) /新用户连接信息cnt.list1.removeAll(); /移除原有用户名while(ssMoreTokens() /取得目前所有聊天室用户名String str=st.nextToken();cnt.list1.add(str); /增加到用户列表中else if(keyword.equals(MSG) /聊天信息 String usr=st.nextToken();c c cnt.tfChat.append(usr); /增加聊天信息到信息显示框nt.tfCh

48、at.append(st.nextToken(0); nt.tfChat.append(n);else if(keyword.equals(QUIT) /断天连接信息System.out.pr tryln(Quit);c c cnt.listen=null;nt.socket.close(); /关闭端口nt.socket=null;catch(IOException e)cnt.list1.removeAll(); /移除用户列表return;14、假定一个缓冲区只能保存一条信息。即缓冲区只有两个状态、有信息或没有信息。void reader_function ( void ); void

49、writer_function ( void ); char buffer;buffer_has_item=0; pthread_mutex_t mutex; struct timespec delay; void main ( void ) pthread_t reader;/* 定义延迟时间*/delay.tv_sec = 2;delay.tv_nec = 0;/* 用默认属性初始化一个互斥锁对象*/ pthread_mutex_init (&mutex,NULL);pthread_create(&reader,*)&reader_function), NULL); writer_func

50、tion( );void writer_function (void) while(1)/* 锁定互斥锁*/pthread_attr_default,(voidpthread_mutex_lock (&mutex); if (buffer_has_item=0) buffer=make_new_item( ); buffer_has_item=1;/* 打开互斥锁*/ pthread_mutex_unlock(&mutex); pthread_delay_np(&delay);void reader_function(void) while(1) pthread_mutex_lock(&mut

51、ex); if(buffer_has_item=1) consume_item(buffer); buffer_has_item=0;pthread_mutex_unlock(&mutex); pthread_delay_np(&delay);15、模拟火车票联网售票系统、多个线程同时出票,保证每张出票的连续且不重复。public class Demopublic sic void main(String args )SellTicket st1=new SellTicket(); st1.setName(线程 1); SellTicket st2=new SellTicket(); st2.

52、setName(线程 2); SellTicket st3=new SellTicket(); st3.setName(线程 3); st1.start();st2.start();st3.start();public clasprivate slTicket extends Threadicid=0;public void run() for(i=0;i20;i+) sell();public synchronized void sell() id+;System.out.prln(currentThread().getName()+买票+id+id);16、JAVA 多线程编程。 用 JA

53、VA 写一个多线程程序,如写四个线程,二个加 1,二个对一个变量减一,输出。package;import java.io.File;import java.io.FileOutputStream; import java.io.IOException;import java.io.PrStream;import com.sun.media.sound.Toolkit;public class test sicnum = 0;public sic void main(String args) System.out.prln(now: + num );new test().start();clas

54、s Thd implements Runnable/创建线程public void run() num +;System.out.prln( num + n);class Thd1 implements Runnable/创建线程 public void run() num -;System.out.prln( num + n);public void start() for (i = 0;i 2; i +)Thd th1 = new Thd();new Thread(th1).start();/线程启动for (i = 0;i 1) available=true;try wait();cat

55、ch(Exception e)System.out.prln(. end.);public synchronized void end()System.out.prln(. end.);publicsynchronized void wake() notifyAll();public sic void main(String args) / TODO Auto-generated method stubABC x=new ABC(haha); TestThread a=new TestThread(x); TestThread b=new TestThread(x); C c=new C(x)

56、;(new Thread(a).start();(new Thread(b).start();(new Thread(c).start();class TestThread implements Runnable ABC abc;public TestThread(ABC abc) this.abc=abc;public void run() if(!abc.available) abc.st();else abc.end();class C implements Runnable ABC abc;public C(ABC abc) this.abc=abc;public void run()

57、try Thread.sleep(1000);/ System.out.prln(sjlfsj jfsdl j);/验证是否执行到这里catch(erruptedException e);abc.wake();18、有一个南北向的桥,只能容纳一个人,现桥的两边分别有 10 人和 12 人,编制一个多线程序让这些人到达对岸,每个人用一个线程表示,桥为共享资源。在过桥的过程中显示谁在过桥其其package cn.thread;。public class Through_out_bridge public sic void main(String args) Bridge b = Bridge.ge

58、tInstance();/实例化桥/实例化左端 9 个人,此时所有人都不能过桥,桥的可以状态标志为不可以用for (i = 1; i = 9; i+) Thread t = new Thread(new t.start();(false, i, b);/实例化右端 12 个人,此时所有人都不能过桥,桥的可以状态标志为不可以用for(i=1 ;i=12;i+)Thread t = new Thread(new t.start();(true,i,b);/桥的可用状态给左端第 10 个人,可以自定义给谁b.se = true;Thread t = new Thread(new(false, 10,

59、 b);classimplements Runnable public Bridge bridge;/桥private String hand;/在桥哪一端 No;/序号public(side,i, Bridge bridge) this.No = i; this.bridge = bridge;if(bridge.se)System.out.prln(i+已经过桥。);if (side) this.hand = new String(右); else this.hand = new String(左);/过桥方法publicsynchronizedvoidthrough()throwserr

60、uptedException if (bridge.se) System.out.prln(hand+边第+No + 在过桥);bridge.open( No); else bridge.lock(No);public void run() try Thread.sleep(1000);/System.out.pr through();ln(No+hand+ 边已经过桥!); catch (erruptedException e) / TODO Auto-generated catch blocke.prStackTrace();class Bridge /可用状态判断 true、可用publ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论