介绍
深入浅析Java中的慢行模式?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
当现在不适合这个操作,或是没有必要进行这个操作时就直接放弃这个操作而回去。这个就是慢行模式
<强>程序示例:强>
程序的需求是模拟一个自动保存的功能。自动保存是为了预防计算机忽然断电或则软件突然出错的危险,定期将数据保存在文件里的功能。
1,数据类:表示是否修改,及修改函数的类
2, SaveThread类:定期保存
3, ChangeThread:修改数据,保存文件
4,主要:模拟数据
包org.zhy.demo04; 进口java.io.FileWriter; 进口java.io.IOException; 进口java.io.Writer;/* * *表示是否修改,及修改函数的类 * @author正意 * */公共类数据{ 私人最终字符串文件名;//文件名称 私人字符串内容;//修改内容 私人布尔改变了;//是否可以修改//构造函数 公共数据(字符串文件名,字符串内容){ this.fileName=文件名; this.content=内容; }/* * *新的修改内容如果有新的需要保存的数据,改变的属性修改为真实的 *注:这个方法是用同步修饰的 *为了保护内容与改变属性用 *同步修饰后就只能同时有 * 1个线程访问也就防止了多线程造成的脏数据 * @param newContent */公共同步孔隙变化(字符串newContent) { 内容=newContent; 改变=true; }/* * *保存 */公共同步无效保存(){ 如果改变(!){//当变化值为假时直接出返回去 返回; 其他}{ doSave();//调用保存方法 改变=false;//保存后改变的值修改为假 } }/* * *具体的修改方法,模拟写到文本中。 */私人空间doSave () { System.out.println(“线程名称:“+ Thread.currentThread () . getname() +“,最新需要保存的值=?内容); 尝试{ 作家作家=new FileWriter(文件名); writer.write(内容); writer.close (); }捕捉(IOException e) { e.printStackTrace (); } } }
包org.zhy.demo04;/* * *定期保存的类 * @author正意 * */公共类SaveThread扩展线程{ 私人数据数据; 公共SaveThread(字符串名称,数据数据){ 超级(名字);//线程名称 this.data=https://www.yisu.com/zixun/data; } 公共空间run () { 尝试{ 而(真){ data.save ();//模拟保存方法 thread . sleep (1000);//休息1秒 } }捕捉(异常e) { e.printStackTrace (); } } }
包org.zhy.demo04; 进口java.util.Random;/* * *修改数据,保存文件的类 * @author正意 * */公共类ChangeThread扩展线程{ 私人数据数据; 私人随机随机=new随机(); 公共ChangeThread(字符串名称,数据数据){ 超级(名字);//线程名称 this.data=https://www.yisu.com/zixun/data; } 公共空间run () { 尝试{ (int i=0;真实;我+ +){ data.change(“没有:“+ i);//模拟的数据 thread . sleep (random.nextInt (1000));//模拟去做别的事情 data.save ();//明确的要求要保存 } }捕捉(异常e) { e.printStackTrace (); } } }
包org.zhy.demo04; 公开课主要{ 公共静态void main (String [] args) { 数据数据=https://www.yisu.com/zixun/new数据(“数据。txt”、“我是默认内容”);//文件的名称及文件的默认内容 新ChangeThread (“ChangeThread”数据).start ();//手动保存 新SaveThread (“SaveThread”数据).start ();//自动保存 } }
<>强运行结果:强>
1,不需要刻意去执行的时候
2,不想等待警戒条件时
3,警戒条件只有一次成立时
看完上述内容,你们掌握深入浅析Java中的慢行模式的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!