设置和获取线程名称
//方法
void setName(String name);//将此线程的名称更改为等于参数name
String getName();//返回此线程的名称
public static Thread currentThread();//返回对当前正在执行的线程对象的引用
相关应用:
//无参构造方法
import java.io.*; public class Main{
public static void main(String[] args) throws IOException, ClassNotFoundException {
DateTest d1=new DateTest(); DateTest d2=new DateTest(); d1.start();
d2.start(); }
} //DateTest.java
public class DateTest extends Thread{ public void run(){
for(int i=0;i<100;i++){
System.out.println(getName()+":"+i);
}
}
}
//含参构造方法
import java.io.*; public class Main{
public static void main(String[] args) throws IOException, ClassNotFoundException {
//方法一
DateTest d1=new DateTest(); DateTest d2=new DateTest(); //设置名称
d1.setName("高铁");
d2.setName("飞机"); //方法二
DateTest d1=new DateTest("高铁"); DateTest d2=new DateTest("飞机"); d1.start();
d2.start(); }
} //DateTest.java
public class DateTest extends Thread{
//方法二
public DateTest(){}
public DateTest(String name){
super(name);
} public void run(){
for(int i=0;i<100;i++){
System.out.println(getName()+":"+i);
System.out.println(DateTest.currentThread().getName())
}
}
}

线程调度

1、分时调度模型

2、抢占式调度模型(java)

线程优先级
//Thread类中设置和获取线程优先级的方法
public final int getPriority();//返回此线程的优先级
public final void setPriority();//更改此线程的优先级
相关应用:
 import java.io.*;

public class Main{
public static void main(String[] args) throws IOException, ClassNotFoundException {
DateTest d1=new DateTest(); DateTest d2=new DateTest(); d1.setName("高铁");
d2.setName("飞机");
d3.setName("汽车"); //返回其优先级
System.out.println(d1.getPriority());//=5
System.out.println(d2.getPriority());//=5
System.out.println(d3.getPriority());//=5 System.out.println(Thread.MAX_PRIORITY);//=10
System.out.println(Thread.MIN_PRIORITY);//=1
System.out.println(Thread.NORM_PRIORITY);//=5 //设置线程的优先级
d1.setPriority(5);
d2.serPriority(10);//仅代表获取CPU的几率高
d3.setPriority(1); d1.start();
d2.start(); }
} //DateTest.java
public class DateTest extends Thread{ public void run(){
for(int i=0;i<100;i++){
System.out.println(getName()+":"+i);
}
}
}
线程控制
static void sleep(long millis);//使当前正在执行的线程停留(暂停执行)指定的毫秒数
void join();//等待这个线程死亡
void setDaemon(boolean on);//将此线程标记为守护线程,当运行的线程都是守护线程时,Java虚拟机将退出
相关应用:
//ThreadSleep.java
public void run(){
for(int i=0;i<100;i++){
System.out.println(getName()+":"+i);
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
} //ThreadSleepDemo.java
ThreadSleep t1=new ThreadSleep();
ThreadSleep t2=new ThreadSleep();
ThreadSleep t3=new ThreadSleep(); //使得一次接一次得出现
t1.setName("曹操");
t2.setName("刘备");
t3.setName("孙权"); t1.start();
t2.start();
t3.start(); //ThreadJoin.java
public void run(){
for(int i=0;i<100;i++){
System.out.println(getName()+":"+i);
}
}
//ThreadJoinDemo.java
ThreadJoin t1=new ThreadJoin();
ThreadJoin t2=new ThreadJoin();
ThreadJoin t3=new ThreadJoin(); t1.setName("康熙");
t2.setName("四阿哥");
t3.setName("八阿哥"); t1.start();
try{
t1.join();//等待这个线程死亡
}catch(InterruptedException e){
e.printStackTrace();
}
t2.start();
t3.start();
//ThreadDaemon.java
public void run(){
for(int i=0;i<100;i++){
System.out.println(getName()+":"+i);
}
}
//ThreadDaemonDemo.java---守护线程
ThreadDaemon d1=new ThreadDaemon();
ThreadDaemon d2=new ThreadDaemon(); d1.setName("关羽");
d2.setName("张飞"); //设置主线程为刘备
Thread.currentThread().setName("刘备"); //设置守护线程
d1.setDaemon(true);
d2.setDaemon(true); d1.start();
d2.start(); for(int i=0;i<10;i++){
System.out.println(Thread.currentThread.getName()+":"+i);
}
线程生命周期
//     新建->就绪->运行->死亡
多线程的实现方式
方式2:实现Runnable接口

避免了Java单继承的局限性

适合多个相同代码去处理同一个资源的情况,把线程和程序的代码、数据有效分离,较好地体现了面向对象的设计思想

//MyRunnableDemo.java
MyRunnable my=new MyRunnable(); Thread t1=new Thread(my,"高铁");
Thread t2=new Threda(my,"飞机"); //启动线程
t1.start();
t2.start(); //MyRunnable.java,接口是Runnable
public void run(){
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
线程同步
案例:卖票
//sellTicket.java
public void run(){
while(true){//死循环
if(tickets>0){//实现卖票
System.out.println(Thread.currentThread().getName()+"正在出售第"+tickets+"张票");
tickets--;
}
}
}
//sellTicketDemo.java
sellTicket t1=new sellTicket(); Thread d1=new Thread(t1,"窗口1");
Thread d2=new Thread(t2,"窗口2");
Thread d3=new Thread(t3,"窗口3"); d1.start();
d2.start();
d3.start();

Java笔记第八弹的更多相关文章

  1. Effective java笔记(八),异常

    57.只针对异常的情况才使用异常 try { int i = 0; while(true) range[i++].climb(); }catch(ArrayIndexOutOfBoundsExcept ...

  2. Java笔记(十八)……包

    概述 对类文件进行分类管理. 给类提供多层命名空间. 写在程序文件的第一行. 类名的全称的是 包名.类名. 包也是一种封装形式. 访问权限 引用<The Complete Reference&g ...

  3. Java笔记(八)

    GUI: awt和swing: java.awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能.属于重量级控件. javax.swing:在awt的基 ...

  4. 菜鸡的Java笔记 第八 - java 面向对象

    面向对象的特点以及开发过程.    java中最大的特点是其支持面向对象编程设计思想.在面向对象之前广泛流传的是面向过程的编程思想,例如:C语言的开发就属于面向过程    如果要想更简单的去理解面向过 ...

  5. 包装类、Object类——Java笔记(八)

    包装类:     基本数据类型的包装类     基本数据类型 包装类 byte Byte short Short int Integer long Long char Character float ...

  6. Java笔记(八)TreeMap & TreeSet & LinkedHashMap

    TreeMap & TreeSet & LinkedHashMap 一.TreeMap HashMap缺陷:键值对之间没有特定的顺序.在TreeMap中, 键值对之间按键有序,Tree ...

  7. java并发编程笔记(八)——死锁

    java并发编程笔记(八)--死锁 死锁发生的必要条件 互斥条件 进程对分配到的资源进行排他性的使用,即在一段时间内只能由一个进程使用,如果有其他进程在请求,只能等待. 请求和保持条件 进程已经保持了 ...

  8. Java基础知识笔记(八:集合类)

    目录 1  集合类简介  2  List介绍及简单使用 2.1  LinkedList介绍及简单使用 2.2  ArrayList介绍及简单使用 2.3  Vector介绍及简单使用 2.3.1  S ...

  9. 转 Java笔记:Java内存模型

    Java笔记:Java内存模型 2014.04.09 | Comments 1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记 ...

  10. Java 笔记 —— java 和 javac

    Java 笔记 -- java 和 javac h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: ...

随机推荐

  1. centos7 七步教你安装搭建 LAMP 服务

    先说说LAMP是什么 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写: Linux,操作系统 Apache,网页服务器 MariaDB或MySQL,数据库管理系统(或者数 ...

  2. WSGI网站部署以及requests请求的一些随想.

    一直想项目,没怎么写过后端服务,但很多时候,有些服务又是公用的,平时一般都用redis来当做通信的中间件,但这个标准的通用型与扩展信太差了. 与一些群友交流,建议还是起http服务比较好,自己也偏向与 ...

  3. react复制文案到剪切板

    这里使用别人写好的插件. 1.安装要用到的插件:copy-to-clipboard: 2.导入: import copy from 'copy-to-clipboard'; 3.使用: copy(co ...

  4. MyBatis面试题汇总

    1.什么是Mybatis? Mybatis是对象关系映射一个框架,它内部封装了JDBC,开发的时候只要关注SQL语句本身,可以严格控制sql的执行性能,灵活,其二可以通过XML或者注解来配置映射信息 ...

  5. dpkt 简单应用

    import dpktfrom dpkt.utils import mac_to_str,inet_to_strcap=f'D:/test_pacp/6.pcap'with open(cap,'rb' ...

  6. 2023.1.21 app后端pyinstaller启动

    1.打包后会在dist文件夹中暂时生成一个新的文件目录,点击app.exe后也是在这个暂时的文件目录下读取文件的,所以需要以下代码拷贝添加原始项目中的文件 pyinstaller -D app.py ...

  7. nodejs的增删改查

    1.新建一个jwttest.router.js 引入toast const {success,fail} = require("../toast"); const jwt = re ...

  8. hdu: 改革春风吹满地(叉乘求面积)

    Problem Description" 改革春风吹满地,不会AC没关系;实在不行回老家,还有一亩三分地.谢谢!(乐队奏乐)" 话说部分学生心态极好,每天就知道游戏,这次考试如此简 ...

  9. Pintia 7-3 列车调度

    7-3 列车调度 (25 分) 火车站的列车调度铁轨的结构如下图所示. 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条轨 ...

  10. mmdetection可视化工具-DetVisGUI

    保存数据 执行程序,需要保存输出结果的pkl文件或者json文件 下面以测试faster_rcnn示例: 在执行测试时可以使用下面这条命令,就会将结果保存到一个pkl文件中. python tools ...