package com.Thread; /** *测试缓冲区的作用 */ public class TestBufferThread { public static void main(String[] args) { SyncStack ss=new SyncStack(); new XiaoFei(ss).start(); new Product(ss).start(); } } /*** * 设置一个馒头类 */ class Mantou{ private int id; public int getId() { return id; } public void setId(int id) { this.id = id; } } /*** * 设置缓冲区 */ class SyncStack{ //定义存放那个馒头的盒子 private Mantou[] mt=new Mantou[10]; //操作馒头的索引 private int index; /** * 放馒头 */ public synchronized void push(Mantou mantou){ //判断盒子是否满 while (this.index==this.mt.length){ try { /** * 语法:wait(),该方法必须要在synchronized块中调用。 * wait执行后,线程会将持有的对象锁释放,并进入阻塞状态, * 其他需要该对象锁的线程就可以继续运行了。 */ this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } //唤醒取馒头的线程 /** * 语法:该方法必须要在synchronized块中调用。 * 该方法会唤醒处于等待状态队列中的一个线程。 */ this.notify(); this.mt[this.index]=mantou; this.index++; } } /** * 取馒头 */ public synchronized Mantou pop(){ while(this.index == 0){ try { /** * 语法:wait(),该方法必须要在synchronized块中调用。 * wait执行后,线程会将持有的对象锁释放,并进入阻塞状态, * 其他需要该对象锁的线程就可以继续运行了。 */ this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); this.index--; return this.mt[this.index]; } } /** * 定义生产者线程 */ class Product extends Thread{ //传入缓冲区 private SyncStack ss; public Product(SyncStack ss){ this.ss=ss; } @Override public void run() { for (int i = 0; i <10 ; i++) { Mantou mt=new Mantou(); mt.setId(i); System.out.println("生产馒头"+mt.getId()); this.ss.push(mt); } } } /** * 定义消费者线程 */ class XiaoFei extends Thread{ private SyncStack ss; public XiaoFei(SyncStack ss){ this.ss = ss; } @Override public void run() { for(int i=0;i<10;i++){ Mantou mt = this.ss.pop(); System.out.println("消费馒头:"+mt.getId()); } } }
老师,帮我看看,只启动生产者线程,消费者线程没反应?
Scanner scanner = new Scanner(System.in); (System.in) 这个代表什么意思,可以不写吗?
任何能用递归解决的问题也能使用迭代解决,这句话反过来说还成立吗?递归和迭代虽然各有优缺,但能否相互代替?
C语言指针学不会
这是什么问题
case 1 后面为什么要加冒号啊,加分号不行吗?
老师,为什么s2这样写会报错?但是加上static就不会报错,这是为什么?
Error response from daemon: failed to parse Dockerfile: ENV must have two arguments
报这个错误?????和视频中编写的dockerFile一样????????????
老师,这里的ego—parent为啥是中划线呀,它的意思是applicationname,但是左侧包名不是application_parent是下划线嘛
为什么我的按老师的方法行不通
用了GBK反而可以。
是不是我的idea什么地方设置有问题,求教
在课堂基础上拓展了一个功能 进度条可以通过点击事件 变换歌曲播放进度
也就是鼠标点在进度条哪里,进度条就会到哪里,然后歌曲的播放时间也会对应的到这里。
其他代码跟老师的一样 只是在监听事件后面拓展了一个鼠标在进度条按下的时候的一个监听函数
代码如下:
//实现可以点击变换歌曲进度的进度条 //设置一个鼠标按下去的监听 //jin-du-tiao-passed 这个类对应的是 进度条底层的那个 监听鼠标在底层的进读条按下的时候 $('#jin-du-tiao').mousedown( function (e) { // console.log('鼠标按下了'); //获得鼠标按下的坐标 // console.log(e.pageX - $('#jin-du-tiao').offset().left); var chang_du=e.pageX - $('#jin-du-tiao').offset().left; //把这个值变成百分比 // console.log(chang_du/910); //设置鼠标属性的长度等于我们点击的这个值 $('.jin-du-tiao-passed').width((chang_du/910)*100 + '%') //现在在来解决播放时间的问题 //播放时长的百分比要等于我这百分比 // chang_du/910 这个是0到100的百分比 //audio.currentTime 这个是当前的秒数 假如歌曲是275秒 // 总秒数*百分比 就是他的百分比 让这个当前播放事件等于这个百分比 也就是ok了 audio.currentTime=totalTime*(chang_du/910); // console.log(audio.currentTime); //这个是秒数 看看对不对 结果ok } )
感觉这个思路下 添加一个快进快退的按钮 来控制歌曲播放进度也可以实现了
——————————————————————
老师请问:
视频中讲师用截图工具测量屏幕的宽度是1600,而我是1919,为什么呢?
显示报错,找不到办法
代码:
package cn.sxt.game; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL; import javax.imageio.ImageIO; public class GameUtil { //工具类最好将构造器私有化。 private GameUtil() { } public static Image getImage(String path) { BufferedImage bi =null; try { URL u=GameUtil.class.getClassLoader().getResource(path); bi=ImageIO.read(u); }catch(IOException e) { e.printStackTrace(); } return bi; } }
我的代码是照着敲的,为什么大部分报错,但是把这些都导入进去就不报错了,但是视频上很明显没有导入这些包的操作,因为我发现我的都要等他报错再导入,然后餐算解决,我想知道出现这样的情况是因为什么原因所导致?现在的我感觉和老师步骤不一致,所以让我很是烦恼,再加上是英文,看不懂,都不知道自己导入了什么
创建类视图时,是不是所有的方法后面都要加上 .as_view()(即上面标注的红色部分)。而且是固定的只加.as_view()呢 。
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637