JAVA入门到精通-第38讲-线程-坦克大战6



 应用程序在内存中开辟空间-进程;

内存-大脑容量;



 反应切换的速度-CPU;

试图去尝试别的进程的地址空间---病毒;

线程是由进程(应用程序)创建的;

涉及到并发,就会涉及到线程;迅雷下载;



 

 

 线程不会跑出到进程外面去的;

地址空间是由操作系统和JVM决定的;

32/64位,CPU的寻址空间范围,加载内存的大小;

 线程的调度:

 CPU、内存资源OK?--->Running,运行状态;

运行过程CPU,内存不够---->Blocked,阻塞状态;

资源空闲,可用------->Runnable可运行状态;

最后,退出程序---->Dead死亡;

和人出生,生病,工作,死亡一样的



 

 

 JAVA中任何一个类都可当做线程来使用;

没有手动调用,通过start会启动进程;

休眠-blocked状态;

sleep会导致线程进入阻塞状态;释放资源;



 sleep可以定时,做定时器;数据库的清洗;

 Blocked-Runnable-Running不停转;

转10次以后,自动死亡-times:



 退出循环,线程死亡了。



 

 JAVA中不允许多继承,Panel类已经继承了JPanel,

JAVA中的Panel类,通过Runnable接口实现多线程:



 class Dog implements Runnables;

重写run函数;

启动的时候先创建线程对象;

把dog放进去;



 ---------------------------------------------

线程--什么是进程

进程--概念

要解释线程,就必须明白什么是进程,就好象要搞清中国历史,就必须要了解春秋战国。

什么是进程呢?

进程是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间),比如用户点击桌面的IE浏览器,就启动了一个进程,操作系统就会为该进程分配独立的地址空间。当用户再次点击左面的IE浏览器,又启动了一个进程,操作系统将为新的进程分配新的独立的地址空间。目前操作系统都支持多进程。

要点:用户每启动一个进程,操作系统就会为该进程分配一个独立的内存空间。

线程--概念

在明白进程后,就比较容易理解线程的概念。

什么是线程呢?

是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。线程有就绪、阻塞和运行三种基本状态。

线程

1、线程是轻量级的进程

2、线程没有独立的地址空间(内存空间)

3、线程是由进程创建的(寄生在进程)

4、一个进程可以拥有多个线程-->这就是我们常说的多线程编程

5、线程有几种状态:

a、新建状态(new)

b、就绪状态(Runnable)

c、运行状态(Running)

d、阻塞状态(Blocked)

e、死亡状态(Dead)

线程有什么用处

java程序中流传一句话,不会使用线程就别跟别人说自己学过java。目前绝大部分应用程序都会涉及到多并发的问题。只要应用程序涉及到并发,就离不开多线程编程。

线程--如何使用

在java中一个类要当作线程来使用有两种方法。

1、继承Thread类,并重写run函数

2、实现Runnable接口,并重写run函数

因为java是单继承的,在某些情况下一个类可能已经继承了某个父类,这时在用继承Thread类方法来创建线程显然不可能java设计者们提供了另外一个方式创建线程,就是通过实现Runnable接口来创建线程。

通过继承Thread类来实现建立线程实例[Thread01.java]

/**
* 演示如何通过继承Thread来开发线程
*/
public class Thread01 {
public static void main(String[] args) {
//创建一个 Cat对象
Cat cat=new Cat();
//启动线程
cat.start();//.start()会导致run函数运行
}
}

class Cat extends Thread{
int times=0;
//重写run函数
public void run(){
while(true){
//休眠一秒
//1000表示1000毫秒
try {
Thread.sleep(1000);//sleep就会让该线程进入到Blocked阻塞状态,并释放资源。
} catch (Exception e) {
e.printStackTrace();
}
times++;
System.out.println("hello,world!"+times);
if(times==10){
//退出线程
break;
}
}
}
}

34

1

/**

2

 * 演示如何通过继承Thread来开发线程

3

 */

4

public class Thread01 {

5

    public static void main(String[] args) {

6

        //创建一个 Cat对象

7

        Cat cat=new Cat();

8

        //启动线程

9

        cat.start();//.start()会导致run函数运行

10

    }

11

}

12


13

class Cat extends Thread{

14

    int times=0;

15

    //重写run函数

16

    public void run(){

17

        while(true){

18

            //休眠一秒

19

            //1000表示1000毫秒

20

            try {

21

                Thread.sleep(1000);//sleep就会让该线程进入到Blocked阻塞状态,并释放资源。

22

            } catch (Exception e) {

23

                e.printStackTrace();

24

            }

25

            times++;

26

            System.out.println("hello,world!"+times);

27

            if(times==10){

28

                //退出线程

29

                break;

30

            }

31

        }

32

    }

33

}

34


----------------------------------------

通过Runnable接口来实现建立线程实例[Thread02.java]

/**
* 演示如何通过Runnable接口来开发线程
*/
public class Thread02{
public static void main(String []args){
Dog dog=new Dog();
//创建线程
Thread t=new Thread(dog);
//启动线程
t.start();
}
}
class Dog implements Runnable{//创建Runnable接口
public void run(){//重写run函数
int times=0;
while(true){
try{
Thread.sleep(1000);
}catch (Exception e) {
e.printStackTrace();
}
times++;
System.out.println("hello,wrold!"+times);
if(times==10){
break;
}
}
}
}

x

1

/**

2

 * 演示如何通过Runnable接口来开发线程

3

 */

4

public class Thread02{

5

    public static void main(String []args){

6

        Dog dog=new Dog();

7

        //创建线程

8

        Thread t=new Thread(dog);

9

        //启动线程

10

        t.start();

11

    }

12

}

13

class Dog implements Runnable{//创建Runnable接口

14

    public void run(){//重写run函数

15

        int times=0;

16

        while(true){

17

            try{

18

                Thread.sleep(1000);

19

            }catch (Exception e) {

20

                e.printStackTrace();

21

            }

22

            times++;

23

            System.out.println("hello,wrold!"+times);

24

            if(times==10){

25

                break;

26

            }

27

        }

28

    }

29

}

30


来自为知笔记(Wiz)

原文地址:https://www.cnblogs.com/xuxaut-558/p/10045741.html

时间: 2024-11-05 15:59:42

JAVA入门到精通-第38讲-线程-坦克大战6的相关文章

JAVA入门到精通-第35讲-事件处理-坦克大战3

画出弧形: g.drawArc: 前两个参数:代表中心点,后面代表宽,高,后面是弧度的大小:  50代表弧度,后面方向:    SWING编程三个部分: (1)组件和布局管理器: (2)绘图技术: (3)事件处理机制:  鼠标,键盘按下的某个按钮或者移动等都是事件: JAVA认为,消息是一种事件对象:事件监听者也是一个类: 事件监听者中有函数或者方法专门去处理事件: import  java.awt.Event.*; 需要对事件进行处理,把Event包带进去:  Border布局中间是 默认的:

JAVA入门到精通-第94讲-山寨QQ项目8-好友在线提示

遇到的问题: 现在每登录一个人,后面的人是能看到前面的登录的人的: 但是,前面的人看不到后面的人登录: //后面每登录一个人,有责任去通知前面登录的人他已经上线了: 通知了完以后,需要更改好友在线的情况: //不让同一个账号反复登录 //如果 好友不在线,则不能聊天 ================================ [ManageQqChat.java] /** * 这是一个管理用户聊天界面的类 */ package com.qq.client.tools; import jav

JAVA入门到精通-第33讲-绘图技术.坦克大战1

    用的是Access数据库,安全性不够好,性能也不够强大:   躲在这里,坦克很少过来,做了一个随机数: 把得分的记录保存在数据库里面: SQLServer2005中型数据库:    (x,y)坐标:     800x600:     表示计算机屏幕上的每一行由800个点组成,共有600行:   共有480000个像素:   java绘图技术:   绘图一般在JPane上画: 覆盖JPanel的paintat方法 Graphics是一个图形画笔类,绘图的重要类,可以理解为一只画笔 supe

JAVA入门到精通-第31讲-常见组件

面板组件-Jpanel  一个JFrame,多个JPanel: JPanel默认是流布局:FlowLayout:  通过JPanel达到复杂布局的目的:  可以认为是网格布局,有3个JPanel:2个Label:2个按钮: 一个密码框和一个文本输入框:   最终展现出来的还是靠JFrame展现的  网格布局好点,3个JPanel,用流布局,控件往里加: ButtonGroup按钮组:一组里面只能选择一个:    对单选框管理,就是把它加入到ButtonGroup里面: 单选框也是一个个放进JPa

JAVA入门到精通-第92讲-山寨QQ项目6-多对多的聊天

QQ聊天项目演示-多对多的聊天 流同时并发的异常: 服务器中转 2/3号只有一个连接: 接收信息:while循环不停地读取: 当1号点开两个窗口时,2/3会共同去争取这个socket: 会出现流同时并发异常: Socket处理成static不太合理: 启动一个窗口就会占据Socket不放: ------------- -实现真正的多人聊天,互相不出现错误 -每一个登录的账号独享一份socket -去掉static 当一个链接达成的时候, 启动线程, 和服务器保持通讯的状态: 做一个类来管理客户端

JAVA入门到精通-第58讲-SQLserver数据类型

float查询的时候精度很奇怪,不建议用来声明小数: float (3) 精度:小数和整数的位数加起来的位数: 精度:20  小数位数:2 numeric (10, 2) datetime可以表示到毫秒级的:后面可以不带任何参数: --getdate(  ) 得到当前的时间: 时,分,秒,毫秒: 在程序中去拿到时间,JAVA专有的日期转换格式去转换: image图片其实很少用: 软件公司里面如何保存图片? 在数据库中保存图片的路径: 用图片服务器或者图床技术来解决图片的显示: 后面连接数据库群:

JAVA入门到精通-第45讲-IO编程

image1=ImageIO.read(new File("bomb_1.gif")); 图片拷贝: 输入流和输出流同时要用的问题: 图片读入到内存: 写入,输出到某个文件: 二进制文件,字节流完成: FileInputStream fis=new FileInputStream("xxxx.jpg"); 输出到指定文件:FileOutputStream  fos=null; 关闭打开的文件流: -----------------------------------

JAVA入门到精通-第72讲-学生管理系统4-model 2模式(1)

删除.查询.添加.修改: -修改: 每个字段都可能修改: //给?赋值 //在prepareStatement语句后面赋值才好用 //修改完了,更新数据 目前为止,已经完成了增删改查-Model1模式 最大特点: 界面和业务逻辑操作是放在一起的: 优点:简单,开发方便: 缺点:代码复用性不高: 中大型项目可读性差,可维护性不高: 前台后端混杂在一起的: 比如:"数据库密码换了, 所有涉及到数据库的地方都需要发生变化" =================================

JAVA入门到精通-第32讲-swing编程实战

 JBorderLayout,左边是JList,拆分窗格: 图片是放在JLabel上的,图片的地址写好就行:  在相关项目下面建立一个文件夹Folder,放置图片:或者复制粘贴:   拆分:水平拆分?垂直拆分?    拆分之后把jList和jl1这两个组件放进去: 可以伸缩:  在窗口左上角出现自己的图标? Border布局: 多行文本框带滚动条,聊天窗口可滚动:   加入QQ左上角图标:      转成图片,getImage; Border布局很有用, CENTER会被自动挤满:  QQ号码.