java简单小结(附一个java实现的生产者消费者问题的程序)

 

最近为了完成开发一个后台通过串口接收网络拓扑和传感数据,并显示网络拓扑和收到的数据的任务,又重新回顾下java。大学时代曾经学过这么课程。现在基本的任务完成了,来做一个自己关于java方面的一些总结吧。

 

1java虚拟机。首先要理解java虚拟机。Java虚拟机是编译和运行Java程序等的各种命令及其运行环境的总称,这是比较正规的定义。我们可以把Java虚拟机理解为在操作系统提供的系统调用的基础上,有一个包围操作系统的层次,就是java虚拟计算机,简称java虚拟机,我们的java程序就是在这个层次之上的,不和操作系统有任何关系。

2:变量。这个是编程语言的核心概念。Java的类也可以理解为一种广义上的变量。

3:面向对象的编程。这个也不说了。

4:文件与数据流。与C语言的输入输出相比,JAVA的输入输出从使用上来说,相对简单点。C语言采用文件指针,操作系统采用文件描述符,JAVA采用输出输出类。InputStream, OutputStream, Reader, Writer以及继承自这几个抽象类的一些子类。FileInputStream, BufferedInputStream,DataInputStream, InputReader, BufferedInputReader等等。其中Reader,Writer系列处理文本文件较方便。InputStream, OutputStream系列处理字节流。 串口的读取也是转换成这些类。

5:异常处理。让程序在运行时,能够动态的捕捉到出现异常的情况,利于程序的调试维护和运行时的出错处理能力。

6:多线程。Java的多线程编程,通过类的同步函数和同步语句块来实现加锁机制和线程的交互协作。Synchronized , wait, notify, 对象等候集等概念。

7:网络套接字方面。基本的URL类。TCPUDP,套接字编程。

8:图形界面。容器,组件,事件对象,事件监听器,事件处理等。

 

下面附上一点程序。

第一个程序:是用JAVA实现的一个生产者消费者问题。

程序有三个线程。主线程ProviderConsumer,生产者线程Provider,消费者线程Consumer。然后他们共同拥有一个在堆上的全局共有对象m_data。当然这个程序只是一个抽象的例子,实际做的是一个线程从串口读取网络拓扑和传感数据,另外一个线程实时的在屏幕上更新显示拓扑图和传感数据。

 

class ExpData
{

 /**
  * @param args
  */
 public boolean m_ready=false;
 public int m_pressure;
 public synchronized void mb_update(int data)
 {
  if(m_ready==true)
  {
   System.out.println("等待数据消费之后才可以更新...");
   try
   {
   wait();
   }
   catch(Exception e)
   {
    e.printStackTrace();
    System.err.println(e);
    
   }
  }
  m_pressure=data;
  System.out.println("压力数据"+m_pressure+"更新成功");
  m_ready=true;
  notify();
  
 }
 public synchronized void mb_analyze()
 {
  if(m_ready==false)
  {
   System.out.println("等待数据更新之后才可以消费...");
   try
   {
    wait();
   }
   catch(Exception e)
   {
    e.printStackTrace();
    System.err.println(e);
   }
  }
  
  System.out.println("压力数据"+m_pressure+"成功得到分析");
  m_ready=false;
  notify();
 }
}

 

 

class Provider extends Thread
{
 public ExpData m_data;
 public Provider(ExpData data)
 {
  m_data=data;
 }
 public void run()
 {
  System.out.println("生产者线程开始工作");
  for(int i=0;i<3;i++)
  {
    m_data.mb_update(10);
  }
  System.out.println("生产者线程工作完成");
 }
}
class Consumer extends Thread
{
 public ExpData m_data;
 public Consumer(ExpData data)
 {
  m_data=data;
 }
 public void run()
 {
  System.out.println("消费者线程开始工作");
  for(int i=0;i<3;i++)
  {
    m_data.mb_analyze();
  }
  System.out.println("消费者线程工作完成");
 }
}
public class ProviderConsumer
{

 /**
  * @param args
  */
 
 public static void main(String[] args)
 {
  // TODO Auto-generated method stub
  ExpData m_data= new ExpData();//生存者和消费者共同处理的数据
  Provider provider=new Provider(m_data);
  Consumer consumer=new Consumer(m_data);
  consumer.start();
  provider.start();
  

 }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值