java实验总结
来源:互联网 发布:ubuntu登录root 编辑:程序博客网 时间:2024/05/18 12:05
* 实现方式和继承方式有什么区别呢?* 区别:
* 继承Thread:线程代码存放在Thread子类run方法中
* 实现Runnable:线程代码存放在接口的子类的run方法中
*
* 实现方式的好处:避免了单继承的局限性
* 在定义线程时,建议使用实现方式,当然如果一个类没有继承父类,那么也可以通过继承Thread类来实现多线程
*
* 注意:Runnable接口没有抛出异常,那么实现它的类只能是try-catch不能throws
* Java对多线程的安全问题提供了专业的解决方式就是同步代码块synchronized(对象){需要同步的代码}
*
* 同步的前提:
* 1.有2个及以上的线程
* 2.多个线程使用用一个锁(对象)
* 同步的好处:解决了多线程的安全问题
* 同步的弊端:多个线程需要判断锁,较为消耗资源
package 多线程; class Ticket implements Runnable { // private static int tick = 100; private int tick=100; Object obj = new Object();//創建一個對象或者自己重新写一个类来创建一个对象下面同步关键字需要用到 @Override public void run() { while(true) { synchronized(obj) // synchronized(this) { if(tick>0){ try {Thread.sleep(10);} catch (Exception e) { } System.out.println(Thread.currentThread().getName()+"...銷售:"+(tick--)+"号票"); // tick--; }else { break; } } } } } public class Test { public static void main(String[] args) { Ticket t = new Ticket();//创建一个实现了Runnable接口的类 //创建4个多线程对象并传递上面接口对象给其构造方法 Thread t1 = new Thread(t);//创建了一个线程 Thread t2 = new Thread(t);//创建了一个线程 Thread t3 = new Thread(t);//创建了一个线程 Thread t4 = new Thread(t);//创建了一个线程 //开启线程 t1.start(); t2.start(); t3.start(); t4.start(); } }
实验六编写简单的计算器
- package Computer;
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.Container;
- import java.awt.Font;
- import java.awt.GridLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.util.Stack;
- import javax.swing.JApplet;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import javax.swing.JTextField;
- public class Count extends JApplet implements ActionListener
- {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private JTextField textField = new JTextField("请输入");
- String operator = "";//操作
- String input = "";//输入的 式子
- boolean flag = true;
- // boolean flag1 = true;
- // boolean flag2 = true;
- public void init()//覆写Applet里边的init方法
- {
- Container C = getContentPane();
- JButton b[] = new JButton[16];
- JPanel panel = new JPanel();
- C.add(textField, BorderLayout.NORTH);
- C.add(panel,BorderLayout.CENTER);
- panel.setLayout(new GridLayout(4, 4,5,5));
- String name[]={"7","8","9","+","4","5","6","-","1","2","3","*","0","C","=","/"};//设置 按钮
- for(int i=0;i<16;i++)//添加按钮
- {
- b[i] = new JButton(name[i]);
- b[i].setBackground(new Color(192,192,192));
- b[i].setForeground(Color.BLUE);//数字键 设置为 蓝颜色
- if(i%4==3)
- b[i].setForeground(Color.RED);
- b[i].setFont(new Font("宋体",Font.PLAIN,16));//设置字体格式
- panel.add(b[i]);
- b[i].addActionListener(this);
- }
- b[13].setForeground(Color.RED);//非数字键,即运算键设置为红颜色
- b[13].setForeground(Color.RED);
- }
- public void actionPerformed(ActionEvent e)
- {
- int cnt = 0;
- String actionCommand = e.getActionCommand();
- if(actionCommand.equals("+")||actionCommand.equals("-")||actionCommand.equals("*") ||actionCommand.equals("/"))
- input +=" "+actionCommand+" ";//设置输入,把输入的样式改成 需要的样子
- else if(actionCommand.equals("C"))
- input = "";
- else if(actionCommand.equals("="))//当监听到等号时,则处理 input
- {
- input+= "="+compute(input);
- textField.setText(input);
- input="";
- cnt = 1;
- }
- else
- input += actionCommand;//数字为了避免多位数的输入 不需要加空格
- if(cnt==0)
- textField.setText(input);
- }
- private String compute(String input)//即1237 的 样例
- {
- String str[];
- str = input.split(" ");
- Stack<Double> s = new Stack<Double>();
- double m = Double.parseDouble(str[0]);
- s.push(m);
- for(int i=1;i<str.length;i++)
- {
- if(i%2==1)
- {
- if(str[i].compareTo("+")==0)
- {
- double help = Double.parseDouble(str[i+1]);
- s.push(help);
- }
- if(str[i].compareTo("-")==0)
- {
- double help = Double.parseDouble(str[i+1]);
- s.push(-help);
- }
- if(str[i].compareTo("*")==0)
- {
- double help = Double.parseDouble(str[i+1]);
- double ans = s.peek();//取出栈顶元素
- s.pop();//消栈
- ans*=help;
- s.push(ans);
- }
- if(str[i].compareTo("/")==0)
- {
- double help = Double.parseDouble(str[i+1]);
- double ans = s.peek();
- s.pop();
- ans/=help;
- s.push(ans);
- }
- }
- }
- double ans = 0d;
- while(!s.isEmpty())
- {
- ans+=s.peek();
- s.pop();
- }
- String result = String.valueOf(ans);
- return result;
- }
- public static void main(String args[])
- {
- JFrame frame = new JFrame("Count");
- Count applet = new Count();
- frame.getContentPane().add(applet, BorderLayout.CENTER);
- applet.init();//applet的init方法
- applet.start();//线程开始
- frame.setSize(350, 400);//设置窗口大小
- frame.setVisible(true);//设置窗口可见
- }
- }
阅读全文
1 0
- java实验总结
- Java 实验4_2总结
- 回顾大学--大一JAVA实验--总结
- java 实际应用中的实验与总结
- 实验总结
- 实验总结
- java实验之swing图形用户界面程序设计及总结
- JAVA多线程基础实验编码及学习笔记总结
- Oracle实验总结
- CME的实验总结
- 实验报告总结
- Weka学习实验总结
- 信号发生实验总结
- asp.net 实验总结
- android 五子棋实验总结
- 汇编实验总结
- Weka学习实验总结
- Socket通讯实验总结
- LeetCode--Combination Sum
- 什么是内存溢出与内存泄露,几种常见导致内存泄露的写法
- 第十一周 --项目一“图基本算法库”
- CSDN怎样转载别人文章
- Zmap安装教程
- java实验总结
- Java算法中的 >>>1
- Codeforces Beta Round #17 C. Balance DP
- RNN公式推导
- 213. House Robber II
- 牛客练习赛7
- JVM内存区域与内存分配
- gradle配置,读spring源码时发现spring项目是gradle构建的
- spark学习-49-Spark的job调度