Jream 画框
paint(Graphics q) 画图工具
repaint() 刷新组件的外观
import javax.swing.*;
import java.awt.*;
/**
* Created with IntelliJ IDEA.
*
* @Author: 曾豪杰
* @Date: 2022/10/27/14:31
* @Description:
*/
@SuppressWarnings("all")
public class home {
public static void main(String[] args) {
new draw();
}
static class draw extends JFrame{
private MyPanel myPanel=null;
public draw() {
myPanel=new MyPanel();
this.add(myPanel);
this.setSize(500,500);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
static class MyPanel extends JPanel{
@Override
public void paint(Graphics g) {
super.paint(g);
画直线
g.drawLine(10,10,100,100);
画矩形边框
g.drawRect(10,10,100,100);
画椭圆边框
g.drawOval(10,10,200,200);
填充矩形
g.setColor(Color.blue);//设置颜色
g.fillRect(10,10,200,200);
填充椭圆
g.setColor(Color.cyan);
g.fillOval(10,10,200,200);
填充图片
获取图片资源 放在out 下
Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/2.png"));
g.drawImage(image,10,10,300,320,this);
画字符串
设置颜色和字体
g.setFont(new Font("隶书",Font.BOLD,50));
g.setColor(Color.black);
g.drawString("java go no!!",100,100);
}
}
}
//输入字符串 触发事件
@Override
public void keyTyped(KeyEvent e) {
}
//按下键 触发事件
@Override
public void keyPressed(KeyEvent e) {//上下左右
if (e.getKeyCode()==KeyEvent.VK_DOWN){
y++;
}else if (e.getKeyCode()==KeyEvent.VK_UP){
y--;
}else if (e.getKeyCode()==KeyEvent.VK_LEFT){
x--;
}else if (e.getKeyCode()==KeyEvent.VK_RIGHT){
x++;
}
repaint();
}
//松开 触发事件
@Override
public void keyReleased(KeyEvent e) {
}
小结
进程: 正在运行,一次执行过程,动态过程
线程:由进程创建 ,是进程的一个实体
单线程: 同一时刻,只能执行一个线程
多线程: 同一时刻,能执行多个线程
并发:
并行:
线程类结构(2种方式)
主线程main,与子线程thred-0 互不干扰 主线程结束 毫无关系
run 只是一个普通方法 是串行 和main线程 绑定一起 ,执行完之后在执行
start 是添加 新线程 并行 互不影响 底层是start0()
真正执行线程的是start0()方法 ,start方法
runnable 和 Thread 的区别
单继承 与 多实现 的区别 ,一个资源 共享 区别
线程终止
主线程 通过 变量 终止 子线程
·
多线程 售卖问题 Thred 和 Runnable 接口
线程常用方法
礼让yield: 不一定成功
插队join:线程插队 一定执行任务
守护线程:一般为工作线程服务的 工作线程无 守护无 并存
工作线程:工作线程也叫用户线程 当线程任务结束 会通知执行完毕
new(未启动) runnable(运行) blocked(锁) waitting(等待) timed-waitting(任务等待) terminated (退出状态)
Synchronized 对象同步锁 用了上锁,解决超卖问题
同步方法(静态的)为当前类本身 java.class
同步方法(非静态的)的锁为当前 this
分析上锁的代码是否为静态 对象是否同一个
当两个线程 分别拿到了对方的锁 但对方又想拿自己的锁就会产生死锁现象
死锁demo:
1 . 同步方法,同步代码块 执行结束
2 . 同步方法,同步代码块中 出现了 遇到了break,return
3 . 同步方法,同步代码块中 出现了 error 和 exception
4 . 同步方法,同步代码块中 执行了 wait()暂停,释放锁
1 . sleep方法,yield方法
2 . suspend方法 挂起方法 (避免使用)
评论