java feature task同步_【java多线程中测试同步的小程序】

本文介绍了一个简单的Java多线程同步程序,通过封装共享变量和使用`synchronized`关键字,确保在多线程环境中安全访问资源。主要心得是将共享变量设为private并用同步方法操作,同时利用`TimerTask`实现定时任务来控制程序执行。程序包括两个线程`Thread1`和`Thread2`,它们通过`EventKey`类共享资源并进行同步操作。
摘要由CSDN通过智能技术生成

这是我做的一个很简单的多线程同步程序,目的是为了测试多线程编程下如何使用同步(synchronized)防止产生竞争共享资源的错误状态,从中得到的心得是:一定要将你所共享的变量封装在一个类中,将所有有关该变量的操作方法都尽可能地封装在包含该变量的类中,并将所有有关读取修改该共享变量的方法都设为同步方法,只有这样才是安全的,并且该变量必须是private类型,主要是为了防止其他对象无意读取到该变量而使该变量的同步形同虚设!因为你可以不通过同步方法直接对该共享变量进行操作!不说了,下面来看代码吧!我还在代码中加了一个计时器类Timer类,这个类可以产生一个后台线程,专门用于计时到指定时间或延时一定时间就去执行TimeTask线程对象任务。

package xinyu.shangrao.demo.fucking;

import java.util.Date;

import java.text.ParseException;

import java.util.Timer;

import java.util.TimerTask;

import java.util.concurrent.TimeUnit;

public class ThreadDemoNew {

public static void main(String[] args) throws ParseException {

long counter;

/*   Date date = null;

String s = "2013-05-29 上午08:26 ";

SimpleDateFormat sdf = new SimpleDateFormat();

date = sdf.parse(s);

System.out.println("------系统默认无参数Date的parse------");

System.out.println("      " +date.getTime() );

counter=date.getTime();

System.out.println("      " + date );  */

Date tim=new Date();

counter=tim.getTime();

tim.setTime(counter+9000);

new Timer().schedule(new TimerTask(){  //到指定时间就去执行这个指定任务,这里是退出操作

public void run(){

System.out.println("时间到:");

System.exit(0);

}

}, tim );

EventKey ke=new EventKey();

Thread1 demo1=new Thread1(ke) ;

Thread2 demo2=new Thread2(ke) ;

demo1.start();

demo2.start();

}

}

class Thread1 extends Thread{

private EventKey ek;

private int ko;

public Thread1(EventKey e){

ek=e;

}

public void run(){

synchronized(this){

while(true){

ko=ek.next();

System.out.println(Thread.currentThread()+"ko:"+ko);

if(ko % 2 !=0 ){

System.out.println("输出的是奇数");

System.exit(0);

}

}}}

}

class Thread2 extends Thread{

private EventKey ek;

private int ko;

public Thread2(EventKey e){

ek=e;

}

更多精彩教程请关注:XP系统下载之家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值