<1>设计4个线程对象,两个线程执行减操作,两个线程执行加操作

//=================================================
// File Name : Thread4_demo
//------------------------------------------------------------------------------
// Author : Common // 类名:Operator
// 属性:
// 方法:
class Operator{ private static int i; // 内部类名:Inc
// 属性:
// 方法:
class Inc implements Runnable{ @Override
public void run() {
// TODO 自动生成的方法存根
for(int j=0;j<10;j++){
this.inc();
System.out.println(Thread.currentThread().getName()+",i="+i);
}
} public synchronized void inc(){
i++;
} } //内部类名:Dec
//属性:
//方法:
class Dec implements Runnable{ @Override
public void run() {
// TODO 自动生成的方法存根
for(int j=0;j<10;j++){
this.dec();
System.out.println(Thread.currentThread().getName()+",i="+i);
}
} public synchronized void dec(){
i--;
}
}
} //主类
//Function : ThreadStop_demo
public class Thread4_demo { public static void main(String[] args) {
// TODO 自动生成的方法存根
Operator.Inc inc1 = new Operator().new Inc(); //实例化内部类对象
Operator.Inc inc2 = new Operator().new Inc(); //实例化内部类对象
Operator.Dec dec1 = new Operator().new Dec(); //实例化内部类对象
Operator.Dec dec2 = new Operator().new Dec(); //实例化内部类对象 Thread t1 = new Thread(inc1); //实例化Thread类对象
Thread t2 = new Thread(inc2); //实例化Thread类对象
Thread t3 = new Thread(dec1); //实例化Thread类对象
Thread t4 = new Thread(dec2); //实例化Thread类对象 t1.start();
t2.start();
t3.start();
t4.start();
} }

<2>设计一个生产电脑和搬运电脑类,要求生产出一台电脑就搬走一台电脑,如果没有新的电脑生产出来,则搬运工要等待新电脑产出;如果生产出的电脑没有搬走,则要等待电脑搬走之后再生产,并统计出生产的电脑数量。

//=================================================
// File Name : computer_transfer_demo
//------------------------------------------------------------------------------
// Author : Common //类名:Computer
//属性:
//方法:
class Computer {
private String name = "未生产";
private boolean flag = true; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public synchronized void set(String name){ //设置信息名称及内容
if(!flag){ //标志位为false,不可以生产,在这里等待取走
try{
super.wait(); //等待搬运者取走
}catch(InterruptedException e){
e.printStackTrace();
}
}
this.setName(name); //设置信息名称
System.out.println(this.getName()); //输出信息
try{
Thread.sleep(300); //加入延迟
}catch(InterruptedException e){
e.printStackTrace();
}
flag = false; //标志位为true,表示可以取走
super.notify(); //唤醒等待线程
} public synchronized void get(){ //取得信息内容
if(flag){ //标志位为true,不可以取走
try{
super.wait(); //等待生产者生产
}catch(InterruptedException e){
e.printStackTrace();
}
}
try {
Thread.sleep(300); //加入延迟
} catch (InterruptedException e) {
e.printStackTrace();
}
this.setName("已经搬运完毕");
System.out.println(this.getName()); //输出信息
flag = true; //修改标志位为true,表示可以生产
super.notify(); //唤醒等待线程
} } //类名:producer
//属性:
//方法:
class producer implements Runnable{ //定义生产者线程 private Computer com = null; //保存Computer引用 public producer(Computer com) { //构造函数
super();
this.com = com;
} @Override
public void run() {
int count = 0;
// TODO 自动生成的方法存根
for(int i=0;i<10;i++){
this.com.set("已经生产完毕");
count++;
}
System.out.println("生产的电脑数量:"+count);
} } //类名:transfer
//属性:
//方法:
class transfer implements Runnable{ //定义生产者线程 private Computer com = null; //保存Computer引用 public transfer(Computer com) { //构造函数
super();
this.com = com;
} @Override
public void run() {
// TODO 自动生成的方法存根
for(int i=0;i<10;i++){
this.com.get(); }
} } //主类
//Function : computer_transfer_demo
public class computer_transfer_demo { public static void main(String[] args) {
// TODO 自动生成的方法存根
Computer c = new Computer();
producer pro = new producer(c);
transfer tra = new transfer(c);
new Thread(pro).start();
new Thread(tra).start();
} }

Java 9.10习题的更多相关文章

  1. JAXB在Java 9/10并且使用Tomcat 9的问题

    Implementation of JAXB-API has not been found on module path or classpath. JAXB API是java EE 的API,jav ...

  2. Eclipse调试Java的10个技巧【转】

    clipse调试Java的10个技巧 先提三点 不要使用System.out.println作为调试工具 启用所有组件的详细的日志记录级别 使用一个日志分析器来阅读日志 1.条件断点 想象一下我们平时 ...

  3. Java复习10.Servlet编程

    Java复习10. Servlet编程知识 20131008 前言: 之前在大三下的时候,学习了一个月的JSP和Servlet知识,但是没有什么项目经验,把JSP Web开发学习实录看了前面几张,后面 ...

  4. 几周内搞定Java的10个方法

    不要将Java与JavaScript弄混了,Java的目标是“一次编译,到处调试”(呃,不对,是“到处运行”).简单来说,就是Java程序可以直接在任何设备上运行. Java语言是什么? 不管我们是否 ...

  5. 030 01 Android 零基础入门 01 Java基础语法 03 Java运算符 10 条件运算符

    030 01 Android 零基础入门 01 Java基础语法 03 Java运算符 10 条件运算符 本文知识点:Java中的条件运算符 条件运算符是Java当中唯一一个三目运算符 什么是三目运算 ...

  6. Java SE 10 新增特性

    Java SE 10 新增特性 作者:Grey 原文地址:Java SE 10 新增特性 源码 源仓库: Github:java_new_features 镜像仓库: GitCode:java_new ...

  7. Java SE 10 Application Class-Data Sharing 示例

    Java SE 10 Application Class-Data Sharing 示例 作者:Grey 原文地址:Java SE 10 Application Class-Data Sharing ...

  8. Java线程——线程习题(一)子线程执行10次后,主线程再运行5次,这样交替执行三遍

    题目:子线程执行10次后,主线程再运行5次,这样交替执行三遍 代码如下: package com.itheima.gan; /** * 子线程执行10次后,主线程再运行5次,这样交替执行三遍 * @a ...

  9. JAVA 5.17习题

    1.编写并测试一个代表地址的Address类,地址信息由国家.省份.城市.街道.邮编组成,并可以返回完整的地址信息. //======================================= ...

随机推荐

  1. canvas缓动

    通过不断地将与目标的距离和系数相乘来让物体实现远快近缓的运动. 如图所示可以做出缓动效果,具体代码如下 var canvas = document.getElementById("canva ...

  2. confluence的安装、备份和恢复(wiki)

    还有一种比较不错的wiki工具MediaWiki 安装教程参考 http://pangge.blog.51cto.com/6013757/1560249 我是按照上面的教程搭建的 还有几篇不错的文章 ...

  3. 选项卡js

    趁着公司不忙,抓紧充充电,开始可能会写的不好,但是每写一个都是一点进步,哈哈,加油 用js实现选项卡切换 1.获取元素 2.初始状态 3.通过循环清空元素状态 4.点击操作以及对应的内容切换 5.自定 ...

  4. 访问修饰符(public,private,protected,internal,sealed,abstract)

    为了控件C#中的对象的访问权限,定义对象时可以在前面添加修饰符. 修饰符有五种:private(私有的),protected(受保护的),internal(程序集内部的),public(公开的),以及 ...

  5. git 高级命令

    git bisect 运行git bisect 通常是为了找出某个导致版本库产生倒退或bug的特殊提交 例如:你的版本库已经从一个已知的"好"状态过渡到一个已知的"坏&q ...

  6. 【SPOJ 7258】Lexicographical Substring Search

    http://www.spoj.com/problems/SUBLEX/ 好难啊. 建出后缀自动机,然后在后缀自动机的每个状态上记录通过这个状态能走到的不同子串的数量.该状态能走到的所有状态的f值的和 ...

  7. 神经网络dropout

    训练集上面,加一个bool型的开关 做预测的时候,不需要打开开关,而是所有的数乘以p, 实际工业界做的时候是: 在训练的时候都除以p,在做预测的时候什么时候都不用干

  8. 状态压缩 HDU 1565

    多组数据 给你一个n*n的矩阵 不能相邻的取数 上下左右 求最大的和 #include<stdio.h> #include<algorithm> #include<str ...

  9. 区间DP HDU 4283

    t个数据 n个权值 1->n 可以入栈调整顺序 花费 第k个出来 w[i]*(k-1); 求花费最少 #include<stdio.h> #include<string.h&g ...

  10. win7 系统无法复制粘贴解决方案

    用远程桌面登陆服务器不能在本机和远程服务器之间粘贴文本了,即不能从本机复制文本粘贴到服务器,也不能从服务器复制文本粘贴到本机. 以下是解决方法之一,试了几次都很管用户:在服务器上打开任务管理器,查看进 ...