1.设计一个线程类:创建3个子线程,每个线程分别打印数字,分别睡眠100,200,300ms —>每个执行都是20次

代码:

package Homework;
//1.设计一个线程类:创建3个子线程,每个线程分别打印数字,分别睡100,200,300 --->每个执行都是20次
public class Test1 { public static void main(String[] args) {
A a=new A();
B b=new B();
C c=new C();
a.start();
b.start();
c.start();
}
} class A extends Thread{
@Override
public void run() {
for(int i=0;i<20;i++){
System.out.println("a线程"+i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class B extends Thread{
@Override
public void run() {
for(int i=0;i<20;i++){
System.out.println("b线程"+i);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class C extends Thread{
@Override
public void run() {
for(int i=0;i<20;i++){
System.out.println("c线程"+i);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

部分运行结果:

2.创建两个线程模拟下载数据,第一个线程负责下载10张图片,第二个线程负责下载20条数据,分别休眠20毫秒和10毫秒。观察打印情况。

代码:

下载数据线程:

package Homework;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; public class DownLoadData extends Thread{
@Override
public void run() {
for(int i=0;i<20;i++){
FileInputStream fis=null;
FileOutputStream fos=null;
try {
fis=new FileInputStream(new File("Photo\\a.txt"));
fos=new FileOutputStream(new File("Example\\a"+i+".txt"));
byte[] bs=new byte[2];
int count=0;
while((count=fis.read(bs))!=-1){
fos.write(bs, 0, count);
fos.flush();
}
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(fis!=null){
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
System.out.println("数据第"+i+"次复制完毕");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

下载图片线程:

package Homework;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; public class DownLoadPhoto extends Thread {
@Override
public void run() {
for(int i=0;i<10;i++){
FileInputStream fis=null;
FileOutputStream fos=null;
try {
fis=new FileInputStream(new File("Photo\\img1.png"));
fos=new FileOutputStream(new File("Example\\img"+i+".png"));
byte[] bs=new byte[2];
int count=0;
while((count=fis.read(bs))!=-1){
fos.write(bs, 0, count);
fos.flush();
}
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(fis!=null){
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
System.out.println("图片第"+i+"次复制完毕");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

测试类:

package Homework;

import java.io.File;

public class Test2 {
public static void main(String[] args) {
//在当前工程下创建文件夹
File file2=new File("Example");
if(!file2.exists()){
file2.mkdirs();
} //创建线程对象,并启动线程
DownLoadData data=new DownLoadData();
DownLoadPhoto photo=new DownLoadPhoto();
data.start();
photo.start();
}
}

部分运行结果:


3.每个线程打印4个:左手是一个线程负责画”□”,右手也是一个线程负责画”O”,左每画一个睡300,右每画一个睡200.

代码:

package Homework;

public class Test3 {
public static void main(String[] args) {
Left left=new Left();
Right right=new Right();
left.start();
right.start();
}
} class Left extends Thread{
@Override
public void run() {
for(int i=0;i<4;i++){
System.out.println("left线程:“口”");
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Right extends Thread{
@Override
public void run() {
for(int i=0;i<4;i++){
System.out.println("right线程:“o”");
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

运行结果

4.创建一个Container类,该类中有属性 int count=200 ,

定义一个方法 getOne(){执行count的–}表示:每调用一次getOne()方法count数量减1。

三个线程操作Container类,每个线程执行10次,每执行一次sleep(100).保证数据的安全性

代码:

package Homework;
/**
* 4.创建一个Container类,该类中有属性 int count=200 ,
* 定义一个方法 getOne(){执行count的--}表示每调用一次getOne()方法count数量减1。
* 三个线程操作Container类,每个线程执行10次,每执行一次sleep(100).保证数据的安全性
* @author Administrator
*
*/
public class Test4 {
public static void main(String[] args) {
Container container=new Container();
MyThread myThread=new MyThread(container);
MyThread myThread2=new MyThread(container);
MyThread myThread3=new MyThread(container);
myThread.start();
myThread2.start();
myThread3.start();
}
} class Container{
int count=200;
public void getOne(){
count--;
System.out.println("当前剩余次数:"+count);
}
} class MyThread extends Thread{
Container container;
public MyThread(Container container) {
this.container=container;
}
@Override
public void run() {
for(int i=0;i<10;i++){
container.getOne();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

Java之进程与线程练习的更多相关文章

  1. Java多线程——进程和线程

    Java多线程——进程和线程 摘要:本文主要解释在Java这门编程语言中,什么是进程,什么是线程,以及二者之间的关系. 部分内容来自以下博客: https://www.cnblogs.com/dolp ...

  2. 关于Java中进程和线程的详解

    一.进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命 周期.它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而 ...

  3. java中进程与线程的三种实现方式

    一:进程与线程 概述:几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是一个线程. 进程:进程是指 ...

  4. java中进程与线程--三种实现方式

    一:进程与线程 概述:几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是一个线程. 进程:进程是指 ...

  5. Java之进程与线程

    一.进程 二.线程 1.定义及特点 1)[定义]线程是一个进程内部的一条执行路径,Java虚拟机允许应用程序并发地运行多个执行路径 是系统独立调度和分派[CPU]的基本单位 2)特点 进程中执行运算的 ...

  6. 【JAVA并发第一篇】Java的进程与线程

    1.进程与线程 1.1.进程 进程可以看作是程序的执行过程.一个程序的运行需要CPU时间.内存空间.文件以及I/O等资源.操作系统就是以进程为单位来分配这些资源的,所以说进程是分配资源的基本单位. ( ...

  7. java中进程与线程的区别

    进程是一个正在运行的应用程序.一个进程包含一个或多个线程.它可以是一段完整的代码或部分程序的动态执行.系统资源分配与调度的基本单位.而线程是CPU调度与运行的基本单位,它是一组指令的集合或是程序的特殊 ...

  8. java之进程和线程

    1.进程和线程的通俗例子. 2.进程和线程关系.

  9. Java并发--进程与线程由来

    下面是本文的目录大纲: 一.操作系统中为什么会出现进程? 二.为什么会出现线程? 三.多线程并发 一.操作系统中为什么会出现进程? 说起进程的由来,我们需要从操作系统的发展历史谈起. 也许在今天,我们 ...

  10. java 中 进程和线程的区别

    目录 什么是进程?什么是线程? 为什么要有线程? 进程与线程的区别? 进程与线程的选择取决条件? 什么是进程?什么是线程?进程:进程是并发执行程序在执行过程中资源分配和管理的基本单位(资源分配的最小单 ...

随机推荐

  1. UEFI+GPT下安装Win10+Ubuntu16.04双系统

    安装环境 SSD+HDD双盘,Win10安装在SSD里,HDD分出来60G安装Ubuntu. 自行百度你的主板是否支持UEFI启动方式. Win10 下载Win10安装镜像.烧盘等步骤就不说了,重启后 ...

  2. storm kafkaSpout 踩坑问题记录! offset问题!

    整合kafka和storm例子网上很多,自行查找 问题描述: kafka是之前早就搭建好的,新建的storm集群要消费kafka的主题,由于kafka中已经记录了很多消息,storm消费时从最开始消费 ...

  3. undo表空间

    undo表空间undo表空间的管理,主要包括创建.删除.修改.切换.其中需要注意的是不能在undo表空间创建数据库对象,还有就是只能是单文件或大文件表空间. 创建创建主要有两种方法,一种是在创建数据库 ...

  4. 【代码学习】GD库中简单的验证码

    大体思路: 代码部分: <?php //1.创建画布 $img = imagecreatetruecolor(100,30); //2.设置颜色 值越小,颜色越深 $color1 = image ...

  5. Angular杂谈系列2-Angular2升级Angular4指南

    什么什么?Angualr4都发布了,之前不都才Angualr2的么?又要推翻重来,啊? 那当然不是,Angualr4只是一个版本号而已,本质上还是Angular2:以后,谷歌把新版本的Angualr称 ...

  6. 浅谈JavaScript匿名函数与闭包

    一. 匿名函数   //普通函数定义: //单独的匿名函数是无法运行的.就算运行了,也无法调用,因为没有名称. 如: function(){             alert('123');    ...

  7. Lua快捷键

      快捷键 含义 ctrl + shift + L 多行编辑 ctrl + D 继续向下选中下一个相同的文本 Alt + F3 选中所有相同所选中德文本                        

  8. sql注入基础(原理)

    一.注入的分类 按数据库分类:1.整形 2.字符型(需要考虑单引号闭合的问题,还有注释不必要的语句  #  ) eag:  id='admin'  id='admin and1=1'这样会报错  所以 ...

  9. spring cloud微服务搭建第一天

    martin fowler大神提出微服务的概念后,各种微服务的技术满天飞,现在用的比较多的是spring cloud和阿里的dubbo,由于dubbo 在16年10月份就停止更新了,这里我们讲解spr ...

  10. 那些过目不忘的无线端交互设计(DRIBBBLE GIF动态图)

    Dribbble精选:Dribbble上令人惊叹的无线端交互设计!来自全球牛人们的奇思妙想,新颖动人的交互在这一张张GIF动态图上一览无余!当然界面一样打动人心,腾出手点赞的同时!记得另存哟:) 作者 ...