一.学习内容
多线程
练习代码
(1)
package Demo01;
//消费者代码
public class Consumer extends Thread {
private Shares Shares;
private int number;
public Consumer(Shares c,int number) {
Shares =c;
this.number=number;
}
@Override
public void run() {
int value=0;
for (int i=0;i<10;i++) {
value = Shares.get();
System.out.println("Consumer number"+this.number+"got:"+value);
try {
sleep(500);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
(2)
package Demo01;
//生产者代码
public class Producer extends Thread{
private Shares Shares;
private int number;
public Producer(Shares c,int number) {
Shares=c;
this.number=number;
}
@Override
public void run() {
for(int i=0;i<10;i++) {
Shares.put(i);
System.out.println("produner number"+this.number+"put:"+i);
try {
sleep(500);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
(3)
package Demo01;
//主代码
public class ProducerConsumer {
public static void main(String[] args) {
Shares c =new Shares();
Producer p0=new Producer(c,1);
Consumer c0=new Consumer(c,1);
p0.start();
c0.start();
}
}
(4)
package Demo01;
//共享资源代码
public class Shares {
private int sep;
private boolean available=false;//数据是否可用
public synchronized void put(int value) {
while (available==true){//数据没有被取出
try {
wait();
}catch(InterruptedException e) {
e.printStackTrace();
}
}
sep=value;
available=true;
notify();
}
public synchronized int get() {
while (available==true) {//数据没有被取出
try {
wait();
}catch(InterruptedException e) {
e.printStackTrace();
}
} available=false;
notify();
return sep;
}
}
(5)简易时钟
package Demo01;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.util.*;
import java.util.Date;
import javax.swing.JFrame;
public class Time extends JFrame implements Runnable {
Thread clock;
public Time() {
super("Clock-CN");
this.setFont(new Font("Times New Roman",Font.BOLD,60));
this.go();
this.setSize(280,100);
this.setVisible(true);
}
public void go() {
if(clock==null ) {
clock=new Thread(this);
clock.start();
}
}
@Override
public void run() {
while(true) {
repaint();
try {
Thread.sleep(1000);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
public void stop() {
clock=null;
}
public void paint (Graphics g) {
String s="";
Date now=new Date();
int hour =now.getHours();
int minute =now.getMinutes();
int second =now.getSeconds();
s=hour+":"+minute+":"+second;
g.setColor(Color.white);
Dimension dim=getSize();
g.fillRect(0, 0, dim.width,dim.height);
g.setColor(Color.blue);
g.drawString(s,20, 80);
}
public static void main(String[] args) {
Time that=new Time();
that.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}