java多线程基础知识-电子时钟

java多线程基础知识简单应用-电子时钟

参考文档《java语言程序设计》-13章多线程实现电子时钟

首先是继承Thread类实现多线程:这段程序可以初步了解线程的“同时执行”,运行可以发现每次运行的结果都是不同的。

Threads.java
package project1_Thread;

public class Threads {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for(int i=0;i<10;i++){
			System.out.println("main begins:");
		}
		Threads1 nt1 = new Threads1();
		Threads2 nt2 = new Threads2();
		
		nt1.start();
		nt2.start();
		for(int i=0;i<10;i++){
			System.out.println("Main End");
		}

	}

}
class Threads1 extends Thread {
	public void run(){
		for(int i=1;i<=50;i++){
			//输出1到50的数
			System.out.print(i+" ");
		}
	}
}

class Threads2 extends Thread {
	public void run(){
		for(char c='A';c<='Z';c++){
			//输出A-Z
			System.out.print(c+" ");
		}
		for(char c='a';c<='z';c++){
			//输出a-z
			System.out.print(c+" ");
		}
	}
}
方法二是实现Runable接口来实现多线程。多数简单的多线程程序都可以通过继承Thread类实现多线程。然而当一个类已经继承了已有的父类时,由于java不支持多继承,实现Runnable接口就成了实现多线程的解决办法。

程序示例:

<pre name="code" class="java">Threads.java

 
package project3_Runnable;

public class Threads {
	public static void main(String[] atgs){
		for(int i=0;i<10;i++){
			System.out.println("main begins:");
		}
		Threads1 t1 =new Threads1();
		Threads2 t2 =new Threads2();
		//实例化实现接口的对象
		Thread th1=new Thread(t1);
		Thread th2=new Thread(t2);
		//使用Thread创建实现Runnable接口的线程
		th1.start();
		th2.start();
		for(int i=0;i<10;i++){
			System.out.println("Main End");
		}
		
	}
	
}
class Threads1 implements Runnable {
	public void run(){
		for(int i=1;i<=50;i++){
			//输出1到50的数
			System.out.print(i+" ");
		}
	}
}

class Threads2 implements Runnable{
	public void run(){
		for(char c='A';c<='Z';c++){
			//输出A-Z
			System.out.print(c+" ");
		}
		for(char c='a';c<='z';c++){
			//输出a-z
			System.out.print(c+" ");
		}
	}
}
注意,在创建Thread对象时,参数必须为一个实现了Runnable接口的对象。·


以上两段代码包含了实现多线沉的两种方法,以下是采用多线程实现一个简单的小程序-电子时钟:

package project_ch13;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class ClockFrame extends JFrame{
	
	JLabel lbClock=null;//创建一个标签
	public ClockFrame(){
		lbClock=new JLabel(getDate());
		//lbClock=new JLabel("**********BEGIN*********");
		//实例化lbClock标签,其title为动态调用getDate方法
		lbClock.setFont(new Font("黑体",Font.BOLD,50));
		lbClock.setForeground(Color.red);
		//设置标签字体以及标签中字的颜色
		this.add(lbClock); 
		//将标签添加到窗体中
		this.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent e){
				if(e.getClickCount()==2){
					System.exit(0);
				}
			}
		});
		//注册监听器,监听鼠标事件,mouseAdapter中的方法都已经封装,直接实现功能即可
		this.setUndecorated(true); 
		//窗体无边框
		this.pack();
		//窗口大小自适应
		this.setLocationRelativeTo(null);
		//窗体居中
		this.setVisible(true);
		//窗体可见;
		
		//创建并启动线程,使时间不断地显示在屏幕上
				new Thread(new Runnable(){
					//在创建Thread对象时直接使用一个匿名的Run那边了对象实现线程中的方法。
					public void run() {
						while(true){
							//无限循环休眠1000ms
							try{
								Thread.sleep(1000);
							}catch(InterruptedException e){
								//扑捉发生在线程中的异常,当一个正在执行的线程被中断时就会出现这个异常,添加catch后当程序被双击停止时不会出现错误
								e.printStackTrace();
							}
							lbClock.setText(getDate());
							
						}
					}
					
				}).start();//启动Thread方法,这个Thread方法也是匿名的。
	}

	private String getDate() {
		//这个方法属于java中常见的获取当前时间并格式化输出的例子
		SimpleDateFormat df=new SimpleDateFormat("hh时:mm分:ss秒");
		//确定时间的格式
		return df.format(new Date());
		//new Date取当前系统时间,使用创建的格式实例格式化返回去到的时间。
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new ClockFrame();

	}

}

练习代码,仅为初学者自我激励,欢迎交流,欢迎打脸吐槽。


  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值