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. struts2之拦截器

    1. 为什么需要拦截器 早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足.可扩展性降低, Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于 ...

  2. virtual box ubuntu 与Windows共享文件夹

    由于懒得去截图了,直接抛链接.参考链接:http://www.cnblogs.com/lidabo/p/5317024.html 简介概括:首先安装增强功能,接着在virtual box的seting ...

  3. 鸟哥linux私房菜学习笔记,U盘安装centos5.3不能正常引导的问题

    前言: 一直都想学习linux,毕竟是做测试的标配.听过鸟哥的linux私房菜大名,作为新手我淘来了第三版,到手看到书的厚度,心都凉了半截,本着不能浪费的原则,还是学吧! 过程:        开始看 ...

  4. GitHub上非常受开发者欢迎的iOS开源项目(二)

    "每一次的改变总意味着新的开始."这句话用在iOS上可谓是再合适不过的了.GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x ...

  5. Extjs6(特别篇)——项目自带例子main.js拆分详解

    本文基于extjs6.0.0 一.拆分代码来看看 1.主页面main是个tab页: 写一些页面的依赖: 标明页面的controller和viewModel Ext.define('Learning.v ...

  6. CF #244 D. Match & Catch 后缀数组

    题目链接:http://codeforces.com/problemset/problem/427/D 大意是寻找两个字符串中最短的公共子串,要求子串在两个串中都是唯一的. 造一个S#T的串,做后缀数 ...

  7. phpcms基础

    CSM基础(做中小型企业网站) 做一个企业站,三个页面比较重要1.首页2.列表页3.内容页 做企业站的流程:1.由美工出一张,设计效果图2.将设计图静态化3.开始安装CMS4.强模板文件放到CSM里面 ...

  8. 在ABP框架中使用MapTo容易犯的错误

    用自己的话说:MapTo其实就是两个实体间的数据转换.不用像以前那样p.name=p1.name 这样赋值,一旦实体的属性多到十几个以上的时候,这样赋值代码就显得有些臃肿了,如下面: Resource ...

  9. (函数封装)domReady

    一般的我们用window.onload()来判断文档是否加载完成,我们一般采用下面的做法: 当文档加载全部完后,我们在执行代码块(很显然,当需要加载的文档及节点庞大时,用户体验可能会变很差) wind ...

  10. google ip地址

    http://203.208.46.146 http://203.208.46.177 http://203.208.46.178 http://209.116.186.251 http://203. ...