实验七 Java 多线程程序设计应用

一、实验目的

1 、理解线程、线程的生命周期等概念。

2、掌握线程的两种实现方法。

3、掌握线程的调度和控制方法。

4 、理解多线程的互斥和同步的实现原理。

二、实验学时

2 学时

三、实验类型 验证性实验

四、实验需求

1、硬件

每位学生配备计算机一台

2、软件

Windows 7 操作系统, JDKeclipse MySQL

3、网络

4、工具

五、实验理论与预备知识

1、进程与线程的区别。

2 java 多线程的两种实现方式及区别。

3、共享变量的处理。

六、实验内容与结果

1、编写应用程序,设计 4 个线程对象,两个线程执行减操作, 两个线程执行加操作。

package xxbb;

class Data{

private int j=0;

public synchronized void add(){

System.out.println(Thread.currentThread().getName()+"对j加1,当前j="+(++j));

}

public synchronized void dec() {

System.out.println(Thread.currentThread().getName()+"对j减1,当前j="+(--j));

}

}

class Add implements Runnable{

private Data data;

Add(Data data){

this.data=data;

}

public void run() {

data.add();

}

}

class Dec implements Runnable {

private Data data;

Dec(Data data){

this.data=data;

}

public void run() {

data.dec();

}

}

public class aa {



public static void main(String[] args) {

// TODO Auto-generated method stub

Data data=new Data();

Add add=new Add(data);

Dec dec=new Dec(data);

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

new Thread(add,"线程A").start();

new Thread(dec,"线程B").start();

}

}



}

2、设计一个生产电脑和搬运电脑类,要求生产出一台电脑就搬走一台电脑, 如果没有新的

电脑生产出来, 则搬运工要等待新电脑产出; 如果生产出的电脑没有搬走, 电脑搬走之后再生 产,并统计出生产的电脑数量。

class Computer{

private String name="电脑";

private static int sum =1;

private boolean flag =false;

public synchronized void set() {

if(flag)

{

try {

super.wait();

}

catch(InterruptedException e) {

e.printStackTrace();

}

}

try {

Thread.sleep(1000);

}

catch(InterruptedException e) {

e.printStackTrace();

}

System.out.println("生产了一台"+name+",现在已经生产了"+sum+"台电脑");

sum++;

flag=true;

super.notify();

}

public synchronized void get() {

if(!flag)

{

try {

super.wait();

}

catch(InterruptedException e) {

e.printStackTrace();

}

}

try {

Thread.sleep(1000);

}

catch(InterruptedException e) {

e.printStackTrace();

}

flag=false;

super.notify();

System.out.println("搬走了一台"+name);

}

}

class made implements Runnable{

private Computer computer=null;

public made(Computer computer) {

this.computer=computer;

}

public void run()

{

for(int i=0;i<10;i++)

{

this.computer.set();

}

}

}

class move implements Runnable{

private Computer computer=null;

public move(Computer computer) {

this.computer=computer;

}

public void run()

{

for(int i=0;i<10;i++)

{

this.computer.get();

}

}

}





public class dddd {



public static void main(String[] args) {

// TODO Auto-generated method stub

Computer c=new Computer();

made t1=new made(c);

move t2=new move(c);

new Thread(t1).start();

new Thread(t2).start();

}



}

  1. 简述死锁的产生。

死锁产生的原因主要是竞争资源,其产生的条件包括资源互斥、请求保持、不能剥夺和循环等待。 死锁产生的根本原因是资源竞争。 如果若干个线程正常运行,遇到彼此需要对方占有的资源时,就可能产生线程死锁。 如果若干个线程异常运行,资源的请求与释放的顺序不当,也可能产生死锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值