java 线程理解
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; public class homework514 {
//run()在完成时不会返回值,Callable接口的call()会产生返回值
public static class Run_test implements Runnable{//使用Runnable接口的run()方法{多线程合作完成任务}
private static int taskCount = 0;
private int priority;
private final int id = taskCount++;//线程id
public Run_test(int priority){
this.priority = priority;
}
public String dispaly(){//多线程就应该在run里面输出
return "线程id:"+id+"优先级:"+priority;
}
public void run(){
Thread.currentThread().setPriority(priority);//run()中是多个线程需要完成的任务
System.out.println(dispaly());
Thread.yield();//线程调度器
}
}
public static Thread getThreadName(String threadName) {
Thread t = new Thread(threadName);
while(true){
//根据线程名取得线程
if (t.getName().equals(threadName)){ return t;
}
return null;
}
} static class Runner_extend_test extends Thread{//多线程各自完成任务
private int countDown=5;
private String name;
public Runner_extend_test(String name){
this.name = name;
}//以倒计时为例子
public String dispaly(){//多线程就应该在run里面输出
return name+":"+(countDown>0?countDown:"GO!"); }
public void run() {
while (countDown-- > 0) {
System.out.println(dispaly());
}
} } public static void main(String[] args)
{ /*
for(int i=1;i<=5;i++)//未设置优先级
{
Thread t = new Thread(new Run_test());//提交给Thread构造器
t.start();
}
*/
/*
//创建一个线程集
ExecutorService exec = Executors.newFixedThreadPool(5);//预先限制数量
for(int i=1;i<=5;i++){
exec.execute(new Run_test());
}
exec.shutdown();
*/
/*
//序列化线程,每一个线程会在下一个线程运行前结束
ExecutorService exec = Executors.newSingleThreadExecutor();//预先限制数量
for(int i=1;i<=5;i++){
exec.execute(new Run_test());
}
exec.shutdown();
*/
/*
//设置线程优先级
ExecutorService exec = Executors.newCachedThreadPool();
Run_test one = new Run_test(Thread.MAX_PRIORITY);
Run_test two = new Run_test(Thread.MIN_PRIORITY);
Run_test three = new Run_test(Thread.NORM_PRIORITY);
exec.execute(one);//10
exec.execute(two);//1
exec.execute(three);//5
System.out.println(getThreadName("one"));
exec.shutdown();
*/
//启动继承Thread的线程
Runner_extend_test run_1=new Runner_extend_test("线程1");
Runner_extend_test run_2=new Runner_extend_test("线程2");
Runner_extend_test run_3=new Runner_extend_test("线程3"); run_1.start();
run_2.start();
run_3.start();
}
}
一切都在代码中
java 线程理解的更多相关文章
- java 线程 理解 解析
1 线程的概述 进程:正在运行的程序,负责了这个程序的内存分配,代表了内存中的执行区域. 线程:就是在一个进程中负者一个执行路径. 多线程:就是在一个进程中多个执行路径同时执行. 假象: 电脑上的程序 ...
- java线程安全理解
java线程安全理解 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. ...
- Java进程线程理解
一个进程包括由操作系统分配的内存空间,包含一个或多个线程.一个线程不能独立的存在,它必须是进程的一部分.一个进程一直运行,直到所有的非守护线程都结束运行后才能结束. 多线程能满足程序员编写高效率的程序 ...
- Java线程锁&分布式锁的理解及应用
了解Java线程锁之前,先理解线程和进程的定义.进程是操作系统分配资源(CPU)的基本单位,线程是CPU执行的基本单位,一个进程可拥有多个线程,同进程间的多个线程共享分配给进程的资源.比如启动JVM时 ...
- 深入理解Java线程池:ScheduledThreadPoolExecutor
介绍 自JDK1.5开始,JDK提供了ScheduledThreadPoolExecutor类来支持周期性任务的调度.在这之前的实现需要依靠Timer和TimerTask或者其它第三方工具来完成.但T ...
- Java线程工作内存与主内存变量交换过程及volatile关键字理解
Java线程工作内存与主内存变量交换过程及volatile关键字理解 1. Java内存模型规定在多线程情况下,线程操作主内存变量,需要通过线程独有的工作内存拷贝主内存变量副本来进行.此处的所谓内存模 ...
- 干货,阿里P8浅谈对java线程池的理解(面试必备)
线程池的概念 线程池由任务队列和工作线程组成,它可以重用线程来避免线程创建的开销,在任务过多时通过排队避免创建过多线程来减少系统资源消耗和竞争,确保任务有序完成:ThreadPoolExecutor ...
- 深入理解 Java 线程池
一.简介 什么是线程池 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务. 为什么要用线程池 如果并发请求数量很多,但每个线程执行的时间很短,就会出现频繁的创建 ...
- java线程的理解
java thread类都是native方法实现的,所以没有用平台无关的方法实现,怎么实现的呢? 线程的实现: 第一种:使用内核线程实现. 内核线程就是直接使用操作系统内核支持的线程,由内核完成切换. ...
随机推荐
- jS弹出新窗口被拦截的解决方法
使用ajax处理数据,在回调中跳转到或打开新页面,这时就会被浏览器拦截 解决方案:先用window.open打开一个窗口,然后修改该窗口地址 var w = window.open('about:bl ...
- Quartz 2.2 动态添加、修改和删除定时任务
QuartzManager.Java 动态添加.修改和删除定时任务管理类 import org.quartz.CronScheduleBuilder; import org.quartz.CronTr ...
- 二、redis持久化
一.redis持久化 1 RDB持久化(定redis的数据定时dump到磁盘上的RDB持久化)RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据 ...
- Python常用数据类型
一 .列表 name = ['zhangshan', 'lishi', 'wangwu']# 列表赋值 name.append('liujun')# 增,默认增加到最后位置 name.insert(1 ...
- Java语法基础学习DayTwentyOne(网络编程)
一.IP地址和端口号 1.作用 通过IP地址,唯一的定位互联网上一台主机. 端口号标识正在计算机上运行的进程,不同进程有不同的端口号,被规定为一个16位的整数0~65535,其中0~1023被预先定义 ...
- linux 增加虚拟内存swap(使用文件)
1.简介 如果你的服务器的总是报告内存不足,并且时常因为内存不足而引发服务被强制kill的话,在不增加物理内存的情况下,启用swap交换区作为虚拟内存是一个不错的选择. 为了测试一些功能我在阿里云购买 ...
- python 语法的一些特性记录
装饰器@符号 装饰器本质上是一个 Python 函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/类对象.它经常用于有切面需求的场景,比如:插入日志 ...
- OO第四次作业
一.论述测试与正确性论证的差异 我认为论述测试代表从理论的角度来进行运行正确性的判断,而正确性测试则是从实践的角度来看待程序的正确性问题.两者之间有着明显的差异. 正确性论证是仅仅从代码的逻辑结构方面 ...
- 四:客服端防护HTTP发送请求类
一.源代码: public class swtDefendOperate{private BackgroundWorker backgroundWorker;//DefendType的值 Verify ...
- java2周来的一些心得和体会
1.首先,在开发的一开始,可以将绝大多数rest可能提交过来字段先抽离出来,做成一个基础类. 然后再继承这个类,这样做的好处是业务就被分开了,谁也不会影响到谁. 2.在maven当中,需要修改自己的类 ...