accp8.0转换教材第1章多线程理解与练习

一.单词部分:

①process进程 ②current当前的③thread线程④runnable可获取的

⑤interrupt中断⑥join加入⑦yield产生⑧synchronize同时发生

二.预习部分

1.线程与进程的区别:

进程是系统运行程序的基本单位

线程是进程中执行运算的最小单位

2.说明创建线程的方式有哪两种

①继承thread类

②实现Runnable接口

3.线程的生命周期可分为几个阶段,各是什么阶段

五个阶段:①创建②就绪③运行④阻塞⑤死亡

4.使用线程的什么方法可以设置线程的休眠,线程的强制执行,线程的礼让

分别为:sleep(),join(),yield()

5.什么情况下需要进行线程的同步,线程的同步有几种方式

当访问冲突时需要进行

两种方式:①同步方法②同步代码块

三.练习部分

1.使用继承Thread类的方法创建线程,显示相应内容

首先创建一个线程类:

package oneOne;

public class MyRunnableone extends Thread{

public void run() {
for(int i=1;i<=20;i++){
System.out.println(i+".你好,来自线程"+Thread.currentThread().getName());

}
}
}

再创建main方法类去掉用就行了

package oneOne;

public class testone {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyRunnableone my=new MyRunnableone();
MyRunnableone my1=new MyRunnableone();
my.start();
my1.start();
}

}

2.使用实现Runnable接口方式创建线程

同第一个先创建实现类:

package oneTwo;

public class MyRunnabletwo implements Runnable{

public void run() {
for(int i=1;i<=20;i++){
System.out.println(i+".你好,来自线程"+Thread.currentThread().getName());

}
}

}

再main方法:

package oneTwo;

public class testtwo {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyRunnabletwo my=new MyRunnabletwo();
MyRunnabletwo my1=new MyRunnabletwo();
Thread tr=new Thread(my);
Thread tr1=new Thread(my1);
tr.start();
tr1.start();
}

}

3.使用多线程模拟多人徒步爬山

先创建继承或者实现类(我这里用了继承):

package oneThree;

public class MyRunnablethree extends Thread{
private int time;
public int num=0;
public MyRunnablethree(String name,int time,int kio) {
super(name);
this.time=time;
this.num=kio*1000/100;

}
public void run() {

while (num>0) {
try {
Thread.sleep(this.time);
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"爬完100米!");

num--;
}
System.out.println(Thread.currentThread().getName()+"到达终点!");
}

}

再main方法:

package oneThree;

public class testthree {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyRunnablethree young=new MyRunnablethree("年轻人", 500, 1);
MyRunnablethree old=new MyRunnablethree("老年人", 1500, 1);
MyRunnablethree child=new MyRunnablethree("小孩", 600, 1);
System.out.println("**********开始爬山*********");
old.start();
young.start();
child.start();
}

}

4.显示,设置线程优先级

先继承或者实现类:

package oneFour;

public class MyRunnablefour extends Thread{
public void run() {
Thread.currentThread().setPriority(1);
System.out.println("子线程名:"+Thread.currentThread().getName()+",优先级:"+Thread.currentThread().getPriority());
}
}

再main:

package oneFour;

public class testfour {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyRunnablefour myf=new MyRunnablefour();
myf.start();
System.out.println("*************显示默认优先级********");
System.out.println("主线程名:"+Thread.currentThread().getName()+",优先级:"+Thread.currentThread().getPriority());
Thread.currentThread().setPriority(10);
System.out.println("***********修改默认优先级后***********");
//myf.setPriority(1);
System.out.println("主线程名:"+Thread.currentThread().getName()+",优先级:"+Thread.currentThread().getPriority());
//System.out.println("子线程名:"+MyRunnablefour.currentThread().getName()+",优先级:"+MyRunnablefour.currentThread().getPriority());

}

}

5.模拟叫号看病

先继承或实现类:

package oneFive;

public class MyRunnablefive extends Thread{
private int time;
//public int pertail=0;
public MyRunnablefive(String common,int time) {
super(common);
this.time=time;

}
public void run() {
Thread.currentThread().setPriority(8);
for(int i=1;i<=10;i++){
try {
Thread.sleep(this.time);
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println("特需号:"+i+"号病人在看病!");

}
}

}

再main:

package oneFive;

public class testfive {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//MyRunnablefive pertail=new MyRunnablefive("特需号", 1000);

Thread temp=new Thread(new MyRunnablefive("特需号", 400));
temp.start();
Thread.currentThread().setPriority(4);
for(int i=1;i<=50;i++){

if(i==11){

try {
temp.join();
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("普通号:"+i+"号病人在看病");

}

}
}

6.多线程模拟 接力赛跑

先创建继承或者实现类:

package oneSix;

public class runSix implements Runnable{
private int meters=1000;
public runSix(){

}
@Override
public void run() {
// TODO Auto-generated method stub
//System.out.println("进来了");
while (true) {
//type type = (type) true.nextElement();
synchronized (this) {
if(meters<=100){
break;

}
System.out.println(Thread.currentThread().getName()+"拿到了接力棒!");
for (int i = 0; i < 100; i+=10) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"跑了"+(i+10)+"米!");
}
meters-=100;
}
}
}

}

再main接口类:

package oneSix;

public class testsix {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
runSix ru=new runSix();
for (int i = 0; i < 5; i++) {
new Thread(ru,(i+1)+"号选手").start();
}
}

}

7.多线程模拟网络购票

桃跑跑,张票票,黄牛党,共同抢十张票,限制黄牛党只能抢一次票

先创建继承或者实现类:

package oneSeven;

public class siteSeven implements Runnable{
private int count=10;
private int num=0;
private boolean flag=false;

@Override
public void run() {
// TODO Auto-generated method stub
//System.out.println("进来了");
while (!flag) {

synchronized (this){
//System.out.println("进来了");
if(count<=0){
flag=true;
return;
}
num++;
count--;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String name=Thread.currentThread().getName();
if(name.equals("黄牛党")){
System.out.println(name+"抢到第"+num+"张票,剩余"+count+"张票!");
break;
}
System.out.println(name+"抢到第"+num+"张票,剩余"+count+"张票!");
}
}
}

}

再创建main接口类:

package oneSeven;

public class testseven {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
siteSeven si=new siteSeven();
Thread per1=new Thread(si,"大东");
Thread yellow=new Thread(si,"黄牛党");
Thread per2=new Thread(si,"启圳");
per1.start();
yellow.start();
per2.start();
}

}

四:总结:

1.Thread类中的方法实现对线程对象的操作

①调整线程的优先级

②线程睡眠sleep()

③线程的强制运行join()

④线程礼让yield()

2.多线程允许程序员编写可最大利用CPU的高效程序

3.两种方式创建线程:

①声明一个继承了Thread类的子类并实现Thread类的run()方法

②声明一个实现Runnable接口的类,然后实现run()方法

时间: 2024-12-20 04:27:24

accp8.0转换教材第1章多线程理解与练习的相关文章

accp8.0转换教材第10章Ajax和jQuery理解与练习

C/S (Client/Server)结构,即大家熟知的客户机和服务器结构. B/S(Browser/Server)结构即浏览器和服务器结构. 认识ajax .XMLHttpRequest.使用jquery实现ajax.处理json格式的响应数据.使用原生态JavaScript实现ajax 一.杂记 1.传统web技术和ajax的请求方式不同 ajax是只获得需要的元素  传统刷新全部 2.ajax的全称是"Asynchronous Javascript And XML"(异步Java

accp8.0转换教材第11章JAjax加护扩展理解与练习

①杂记:前面有原生态JavaScript实现ajax这里又多了更简单的方法实现ajax ②$.get()方法的常用参数 参数 类型 说明 url String 必选,规定发送地址 data PlainObject或String 可选,规定请求发送的数据 success Function(PlainObject data, String textStatus,jqXHR jqxhr) 可选,成功后调用的函数 参数data:可选服务器返回结果 参数textStatus:可选描述请求状态 参数jqxh

accp8.0转换教材第7章JavaScript操作DOM对象理解与练习

程序调试,chrome开发人员工具,DOM操作,节点和节点间的关系,节点信息,操作节点,获取元素 一.单词部分 ①alert警告②prompt提示③parentNode父节点④childNode子节点⑤firstChild第一个子节点 ⑥lastChild最后一个子节点⑦nextSibling下一个同级⑧previousSibling上一个同级 ⑨createElement创建节点元素    appendChild附加节点    insertBefore在..之前添加 cloneNode复制 节

accp8.0转换教材第2章初识Mysql

首先安装MySQL: 一.单词部分: ①networking网络②option选择③port端口④firewall防火墙⑤engine引擎 ⑥standard标准⑦character字符⑧collation校对⑨stirage存储 create 创建     drop 删除   comment 评论  variables变量 二.预习部分 1.请写出创建和删除数据库的sql语句 CREATE DATABASE 数据库名; DROP DATABASE 数据库名; 2.写出创建和删除表的sql语句

accp8.0转换教材第8章JavaScript对象及初识面向对象理解与练习

JavaScript数据类型,对象,构造函数,原型对象,初识原型链,对象继承 一.单词部分 ①object父类②constructor构造函数③instance实例④call调用 ⑤apply应用⑥combination组合⑦inheritance继承 二.预习部分 1.简述创建对象的两种方法,以及两者的区别 new  和  字面量赋值 前者要用点.添加属性和方法 后者直接调用 2.简述使用构造函数创建实例的步骤 ①创建一个新对象 ②将构造函数的作用域赋值给新对象 ③执行构造函数代码块 ④返回新

accp8.0转换教材第9章JQuery相关知识理解与练习

自定义动画 一.单词部分: ①animate动画②remove移除③validity有效性 ④required匹配⑤pattern模式 二.预习部分 1.简述JavaScript事件和jquery事件方法不同 前者需要在 前面加on后者不要 2.调用执行jquery中的hasclass()方法能实现什么功能 查找是否有这个样式 3.validity:对象有哪些常用属性 toolong:判断输入的值是否超过限定字符 typemismatch:输入值是否与表单匹配 customError:自定义验证

Android教材 | 第三章 Android界面事件处理(二)—— 杰瑞教育原创教材试读

 编者按 JRedu 杰瑞教育原创系列教材将于年后与大家正式见面.为更好的借鉴读者意见,我们将会陆续地在博客园推出一系列教材试读.我们也热忱的欢迎广大博友与我们互动,提出宝贵意见. 本篇博客将推出教材第三章第二部分的试读(传送门:第一部分),请大家继续提出宝贵意见,我们也将为积极互动的博友,免费提供我们的原创教材以及更多福利,也欢迎大家加入最下方QQ群与我们交流,谢谢大家! 3.5 系统设置事件处理 3.5.1onConfigurationChanged响应事件 在App开发过程中,有时候需要获

第16 章 多线程

第16 章 多线程 16.1.1 线程和进程 所有运行中的任务通常对应一个进程(Process).当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中的程序,并且具有一定的独立功能.进程是系统进行资源分配和调度的一个独立单位 一般而言,进程包含如下3个特征 1.独立性 :进程是系统中独立存在的实体,它拥有独立的资源,每一个进程都拥有自己私有的地址空间,没有经过进程本身运行的情况下,一个用户进程不可以访问其他进程的地址空间 2.动态性 :进程与程序的区别在于,程序只是一个静态指令集合,而

[深入理解Android卷一全文-第九章]深入理解Vold和Rild

由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. 第9章  深入理解Vold和Rild 本章主要内容 ·  介绍Vold. ·  介绍Rild. 本章涉及的源代码文件名称及位置 下面是本章分析的源码文件名及其位置. ·  Main.cpp system/vold/Main.cpp ·  NetlinkManager.cpp system/vold/Netli